2016-06-09 9 views
0

Ich kann eine URL in ein WebBrowser-Steuerelement laden und eine Anmeldung (formularbasiert) ausführen, ich sehe, was ich sehen muss. Großartig, jetzt möchte ich XPath verwenden, um die Daten zu erhalten, die ich brauche.XPath, htmlAgilityPack und das WebBrowser-Steuerelement

Das geht nicht, mit einem Web-Browsers (es sei denn, Sie nicht einverstanden?) So dass ich die Agilität Packung einer neuen Sitzung zu treten, wie pro unten:

var wc = new WebClient(); 
wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"; 
var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.Load(wc.OpenRead(url), Encoding.UTF8); 

var value = doc.DocumentNode.SelectSingleNode("|//li[@data-section='currentPositionsDetails']//*[@class='description']"); 

Mein Wert nicht auffindbar ist, weil die Website doesn stellen Sie es der Öffentlichkeit nicht aus (es wünscht eine eingeloggte Sitzung). Wie kann ich meine WebBrowser-Kontrollsitzung an meinen WebClient() "weitergeben"? Wenn ich mir einige Methoden anschaue, wie ich meine Login-Daten veröffentlichen kann, scheint alles sehr kompliziert zu sein.

Irgendwelche Ideen? - Dank

Antwort

0

Sie können den Körper-HTML-String mit webBrowser1.Document.Body.OuterHtml abrufen und laden Sie es mit HtmlAgilityPack:

var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.Load(new StringReader(this.webBrowser1.Document.Body.OuterHtml)); 
+0

Danke, versuchte dies. Aber nur die Hälfte meiner XPath-Abfragen gibt einen Wert zurück. Der XPath gibt ein Ergebnis zurück, wenn ich mit einem Tool namens HAPXPathFinder teste. Können Sie sich einen Unterschied zwischen dem OuterHtml, das vom webBrowser-Steuerelement zurückgegeben wird, und dem, was ein WebClient() möglicherweise lädt, vorstellen? –