【问题标题】:XPath, htmlAgilityPack and the WebBrowser controlXPath、htmlAgilityPack 和 WebBrowser 控件
【发布时间】:2016-06-09 21:52:27
【问题描述】:

我可以将 url 加载到 WebBrowser 控件中并执行登录(基于表单),我看到了我需要看到的内容。太好了,现在我想使用 XPath 来获取我需要的数据。

不能用 WebBrowser 做到这一点(除非你不同意?)所以我使用 The Agility Pack 来启动一个新会话,如下所示:

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']");

我的值无法检索,因为网站不会将其公开(它需要登录会话)。如何将我的 WebBrowser 控制会话“传递”到我的 WebClient()?研究一些如何发布我的登录信息的方法,这一切似乎都非常复杂。

有什么想法吗? - 谢谢

【问题讨论】:

    标签: c# xpath


    【解决方案1】:

    您可以使用webBrowser1.Document.Body.OuterHtml 检索正文 html 字符串并使用 HtmlAgilityPack 加载它:

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

    【讨论】:

    • 谢谢,试过了。但是我的 XPath 查询中只有一半返回了一个值。当我使用一个名为 HAPXPathFinder 的工具进行测试时,XPath 会返回一个结果。你能想到 webBrowser 控件返回的 OuterHtml 和 WebClient() 可能加载的内容之间有什么区别吗?
    【解决方案2】:

    好的,将其发布为答案,因为它似乎在其他地方得到了回答/讨论。对于像我这样的业余爱好者来说,这并不容易!

    How to pass cookies to HtmlAgilityPack or WebClient?

    HtmlAgilityPack.HtmlDocument Cookies

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-10
      • 2015-03-16
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2013-10-15
      相关资源
      最近更新 更多