【发布时间】:2017-07-13 20:29:12
【问题描述】:
由于某种原因,在解析https://touch.facebook.com/messages时
使用getElementById("threadlist_rows"),即使 id 确实存在,我也会收到 null。
它在html() 输出中,它可以在线尝试jsoup,我可以毫无问题地获取其他ID,例如root。
同样的方法一直适用于其他页面,我能看到的唯一区别是,在正文中还有很多其他 id 前缀为 threadlist_row_ 的元素。
getElementsByClass("aclb") 等其他各种选择器似乎也没有返回此页面的完整列表。
谁能解释一下这个问题?
【问题讨论】:
-
它不适用于 Jsoup,因为 Jsoup 只解析静态 HTML。您提到的具有 ID 的元素是动态创建的(JavaScript),Jsoup 不执行任何 JavaScript 代码。检查 PhantomJS 库 (*.com/a/39369662/2194470)
-
@SzymonStepniak 但如果 html 方法确实显示 id 已经存在,它不应该工作吗?加载后未添加元素。我必须检查 aclb 元素,因为情况可能不同。
-
不,当 Jsoup 打开网站时,此元素不存在。它显示在 Web 浏览器中,因为 Web 浏览器解释创建此元素的 JavaScript 代码。 Jsoup 不解释任何 JavaScript,所以这个元素永远不会为 Jsoup 显示。如果您需要一个解释 JavaScript 的解决方案,您将不得不仔细研究诸如PhantomJS(它解释 JavaScript)
-
@SzymonStepniak 谢谢。刚刚在我的 chrome 上禁用了 javascript,发现情况确实如此。如果您想发布答案,我会接受它
-
完成。看看我发现了什么——将 PhantomJS 与 Jsoup 结合起来。在您的情况下,这可能是最好的方法。祝你好运!
标签: jsoup