检测PhantomJS中加载的页面中的JavaScript

时间:2014-05-21 21:33:01

标签: javascript html phantomjs

我正在使用PhantomJS作为爬虫;如果页面中没有JS,我可以假设它在onLoadFinished触发时已完全加载,但如果页面中有JS,我需要稍等一下,让脚本有机会完成任务。这是我目前正在检测JS:

var pageHasJS = page.evaluate(function () {
    return (document.getElementsByTagName("script").length > 0 ||
            document.evaluate("count(//@*[starts-with(name(), 'on')])",
                              document, null, XPathResult.NUMBER_TYPE,
                              null).numberValue > 0);
})

这会查找<script>代码和onsomething属性的元素。

Q1:还有其他HTML构造可以将JS隐藏到页面中吗? javascript:网址不计算在内,因为任何内容都不会被点击 Q2:有没有更好的方法进行第二次测试?我相信使用querySelector无法做到这一点,因此诉诸XPath,但也许还有一些其他功能可以完成同样的任务。
问题3:加载后,爬网程序不与页面交互。 {1}}事件是我知道的唯一遗留事件属性,在没有用户交互的情况下触发。还有其他人吗?换句话说,用onload或甚至document.evaluate("count(//@onload)", ...)替换第二个测试是否安全?

1 个答案:

答案 0 :(得分:1)

您可以拦截实际的HTTP请求(查看onResourceRequested / onResourceReceived),并在加载所有资源后截取屏幕截图,而不是检查脚本标记并提供固定的时间。看看ajax-render