【问题标题】:reading div after javascript load [closed]javascript加载后读取div [关闭]
【发布时间】:2014-07-28 15:33:45
【问题描述】:

我在解析论坛信息时遇到问题。 下面是一些例子:

  1. Easy
  2. Hard

获取信息非常容易,因为它们显示在 id = "poe-popup-container" 的 div 中。

问题在于,只有在浏览器允许您查看信息时才会填充该 div。这可以通过使您的浏览器高度非常小并查看 .但是,该 div 将是空的,但只要您向下滚动查看项目,它就会发生变化。

我正在尝试使用 htmlagillitypack 读取其中的节点。问题在于,正如我所解释的,它只有在浏览器说您需要该信息时才具有信息。 因此,当您尝试下载 html 时,该 div 为空。 我也尝试使用网络浏览器下载该页面,但发生了同样的事情。

我正在尝试使用以下代码:

 string page = System.Text.Encoding.UTF8.GetString(Webclient.DownloadData("http://www.pathofexile.com/forum/view-thread/966384"));
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();           
        doc.LoadHtml(page);            
        HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@id='poe-popup-container']");            
        MessageBox.Show(node.InnerHtml);

【问题讨论】:

  • 该网站将所有 js 加载到一个捆绑和缩小的文件中,这很难破解。该页面确实在没有此 div 内容的情况下加载,并且我找到了填充它的代码,但缩小使其非常难以理解。无论如何,HtmlAgilityPack 可能不是这项工作的工具,除非您发现该 div 中的数据与 HTML 本身一起提供。
  • 再挖一点,内容是用页面自带的json数据渲染的,你可以在源require(["PoE/Item/DeferredItemRenderer"]的这一行附近找到它,解析json会给你你需要的数据.
  • @mot 是的,我也发现了 javascript,问题是当字符串太大时它以 ... 结尾,并且在“硬”示例中可以看到信息丢失跨度>
  • 哪个字符串太长了?整个 HTML 还是只是 json?
  • json pastebin.com/ng5fhKj6 看看字符串的末尾,那一个来自于难的例子,因为它可以工作。有没有办法询问完整的字符串?

标签: c# javascript html


【解决方案1】:

你正在尝试做不可能的事情。 Javascript 在浏览器中执行。 HtmlAgilityPack 是仅用于解析静态 html 的库 - 它无法执行 javascript。

那么您为什么不研究浏览器自动化呢?例如http://watin.org/

【讨论】:

  • 回家后试试看建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多