




Js İle Yüklenen İçeriği Html Olarak Görme
-
Bazı sitelerde içerik js ile yükleniyor veya js ile gizli şekilde gösteriliyor (kaynak kodlarına baktığımızda bir halt göremiyoruz.) Fakat chrome da bakmak istediğimiz yere sağ tick incele dediğimizde kodlar gayyet güzel görünüyor.
Şimdi içerik çekeceğimiz site de bu şekilde br gösterim varsa ne yapmamız / nasıl bir yol izlememiz gerekir ? chrome da incele dendiğinde ne güzel tüm kodlar görünüyor fakat php veya python ile kodları çektiğimde maalesef görünmüyor ve doğal olarak parsede edemiyorum. Yolu yöntemi metotu gösterirseniz sevinirim
-
Hocam şöyle bir araştırdım ancak bu işlem JS ile runtime'da client-side'da yaptıldığı için klasik curl ile vs. yapayacağını söylemişler. Ya ajax requestini kendin tekrar atacaksın. Yada NodeJS'le yazılmış sayfaların screnshootlarını almaya yaran bir uygulama vardı. Onun gibi birşeyle client-side da oluşturulmuş html'i elde edip öyle çekebilirsin.
-
@terror 'un dedigi gibi ya o js nereye request atıyorsa sen onun yerine atıp direk kaynaktan veriyi aldıktan sonra parse etmeyi deniceksin veya şöyle bişi buldum .
https://github.com/facebook/php-webdriver -
Hocam baktığın siteler için 2 ihtimal var. Ya ajax ile çekiyordur yada sayfanın tüm html etiketleri JavaScript içerisinde gömülü (Twitter ve gmail örnekleri).
Dolayısıyla sen o sitelerden bilgi çekmek istediğinde php, python vs.. botlarının tarayıcı davranmasını sağlamalısın. Çünkü Javascript (en nihayetinde ajax) tarayıcı taraflı çalıştığı için bot ile çektiğin şeyler saf js'den başka bir şey değildir.
Tavsiyem şu, o sayfaların network özelliğine bak, bir mesela ajax.php gibi sayfadan veri getiriyordur. Sen de botları o sayfaya yöneltirsin.
Bir örnek vereyim.
<script>document.write("Merhaba ben ontedi<br /><strong>burası kalın</strong>");</script>
javascript betiğini bir sayfa olarak kaydet ve onu php bot ile çekmeye çalıştığında sayfa sana ne olarak görünüyor?
-
phantomjs
-
bu tip siteler öncelikle bir client framework yüklüyor sonra o frameworke komut göndererek görüntü ve hizmet sağlıyor(örn. gmail) sitenin içeriğini görüntüleyip parse etmek için öncelikle javascriptleri çalıştırman gerekiyor sonucunda oluşan html'i senin kopyalayıp parse etmen gerekiyor. ajax requestini senin atman epey bir zorlar çünkü en basiti gwt tabanlı uygulamaların bu tip istekleri bir takım güvenlik kontrolündne geçiyor sonrasında adamlar bellir bir method ve şablon oluşturuyorlar(network trafiğini incelersen görürsün) bu şablonda ne neye karşılık geliyor bilmen lazım ona göre istekleri oluşturup cevapları handle edebilmen lazım ki bu kadar işe pek uğraşmak akıl karı değil eğer tarayıcı üzerinde bir pluign çalıştırıp almak istersen bu kısım çok basit örn chrome için plug in yazmayı araştır biraz bu yöntemle senin yerine client framework bu işi çözer sende hazır html i kullanırsın.
-
snnyk bunu yazdı
phantomjs
-
Absolut bunu yazdısnnyk bunu yazdı
phantomjs
hah dediğim buydu.com
-
Biraz araştırayim phantomjs yi. Elinde örnek vs olan varsa atarsa ona da bakmam faydali olacaktır
-
Selamlar,
f12->network sekmesinden ajax ile çekilen içeriği ve gerçek adreslerini görebiliyorsunuz çok fazla istek varsa xhr'lere bakın sadece. Sonra direk o adrese bağlanmak gerek, yalnız istek yollarken post metoduyla veri de gönderiyorsa göz önünde bulundurmalı.
Ah ah zamanında ne acayip oGame oynardım...
-
Ayrıca çekilen adresteki içerik ekranda göründüğü gibi gelmiyorsa json ya da xml olarak geliyordur çok büyük ihtimalle. Onu da kendin kafana göre işlersin, dom parse işinden kurtulursun.
Eğer botlara karşı ek önlemler alındıysa onların mantığını anlamak ve çözmek biraz zaman alıyor ama çözülmeyecek diye birşey yok.