Bilmek istediğin her şeye ulaş

C#'ta javascript ile yüklenen dinamik HTML kaynak kodlarını nasıl çekeriz?

HtmlAgilityPack kullanarak bir sitenin verilerini çektirebiliyorum fakat sitede bazı sayfalar jacascript ile yüklenmekte yani çağırılmadığı sürece o sayfanın kaynak kodlarına erişemiyorum. c# ta javascript ile yüklenen bu dinamik kaynak kodlarını çektirebileceğim bir yöntemi metot var mıdır? yardımlarınız için şimdiden teşekkür ederim.Düzenle
HttpRequest veya json, jquery ile veri okuma konularını incelersen sanırım işini görecektir.. Kolay gelsin ;)
  • Paylaş
5

Erdinç Ayvaz, Kaynak kodlarındaki verileri HtmlAgilityPack ile çekiyorum örnek kodlarım :
Uri url = new Uri("site adı");
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string html = client.DownloadString(url);
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);
HtmlNodeCollection sitekodlari = document.DocumentNode.SelectNodes("//div[@class='çektiğimiz veri']");

jquery, json, ajax metotlarını daha önceden de araştırmama rağmen bir sonuca varamamıştım zaten buraya sorma ihtiyacı duydum. Tavsiyenizi detaylandırır mısınız?

Serhat Öz, Bu yöntemlede kaynak kodlarını cekebilirsin..Kolay gelsin.

private static string GetSourceCode (string url)
{
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);


HttpWebResponse response = (HttpWebResponse)request.GetResponse();


using (StreamReader stRead = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return stRead.ReadToEnd();
}
}
protected void btnVeriGetir_Click(object sender, EventArgs e)
{
string document = GetSourceCode("google.com/");
Yazi.InnerText = document;
}

Erdinç Ayvaz, İlginiz için çok teşekkür ederim fakat bu şekilde de tıpkı benim kullandığım yöntemdeki gibi dinamik html kaynak kodlarını çekmiyor. Sanırım ajax metotlarına yoğunlaşmam gerek diye düşünüyorum

Serhat Öz, tam olarak ne yapmak ıstedıgını anlamadım, benımde ılk baslarda bı dusuncem vardı ıste bı tımer koyup bellı sanıye aralıklarıyla update panel ıcınde verılerın guncel halını goruntulemek gıbı onun gıbı bısey mı demek ıstıyorsun tam olarak dınamık kaynak kodu nedır?? benım bunu yapmaktakı amacım acık arttırma sıstemı ıcındı senın amacın nedır ??

Erdinç Ayvaz, Dinamik kaynak kodu diye anlatmaya çalıştığım olay şu;
Öncelikle bir siteden tablo verilerini çekiyorum, sitede genel tablo ve detaylı tablo var. Ben detaylı tablonun verilerini çekmek istiyorum ancak o siteye ilk girişte sadece sadece genel tablo verileri paylaşılıyor. Yani detaylı tablonun verileri kaynak kodda bulunmuyor. Verileri çekeceğim sayfada 2 adet buton var biri detaylı biri ise genel, detaylı butonuna tıkladığımızda site linkinde değişiklik olmadan detaylı tablosundaki veriler javascript ile yükleniyor. istediğimiz veriye öğeyi denetle dediğimiz zaman görebiliyoruz fakat bu html kodlar sonradan yüklendiği için sayfanın ilk başında gelen kaynak kodlarında olmuyor. Bizim yazdığımız kodlarda ise istediğimiz siteye ilk girişteki kaynak kodları çektiğinden detaylıdaki verileri çekemiyoruz. Bu yüzden ben detaylı tablosundaki html kaynak kodlarına dinamik kaynak kodu dedim. Sorunum ise javascript ile sonradan yüklenen kaynak kodlarını c# ile çekememem.

Gizli bir WebBrowser ile sayfayı tamamen yüklendikten sonra, içeriğini okumayı denemen senin işine yarar mı? Java scriptleri kendisi çalıştırabilir ve gerekli sayfayı oluşturabilir çünkü. (Java scriptler çalışmasında hata verirse bir ayar yapman gerek gerçi.)
  • Paylaş
4

Erdinç Ayvaz, Son düşündügüm olayda buydu aslinda düşünceme tercüman oldunuz :) Gizli bir webbrowser ile sitede once kendi istedigim butona tiklatmak ardindan webbrowserin çektiği html kodlarini kullanmak mantıklı. Başarısı gayet muhtemel bi yöntem. Tavsiyeniz için teşekkürler

Orhan Tutum, Rica ederim. Kolay gelsin o zaman. :)

Erdinç Ayvaz, webbrowser ile sayfayı tamamen yükledikten sonra istediğim butona tıklattırıyorum javascriptleri yüklüyo istediğim sayfayı açıyor fakat html kodlarını istediğim sayfayı açtıktan sonra çektiğimde yine sayfanın ilk html kodlarını veriyor. istediğim html kodlarını çekmiyor malesef :(

Orhan Tutum, İçeriği bu şekilde mi?
textBox1.Text = webBrowser1.DocumentText;

Yoksa bu şekilde mi okuyorsunuz?
textBox1.Text = webBrowser1.Document.Body.InnerHtml;

Sonraki Soru
HESAP OLUŞTUR

İstatistikler

377 Görüntülenme9 Takipçi2 Yanıt