PhantomJS - 试图找出一个元素是否为空
PhantomJS - Trying to find out if an element is empty or not
我正在尝试编写一个简单的PhantomJS脚本,其中我通过ID找到一个元素并确定它是否为空。 我已经尝试了一些建议的东西,例如.childNodes.length,.textContent等。这些都会导致空错误:
TypeError: null is not an object (evaluating 'document.getElementById('idname').childNodes')
或者 phantom 只是崩溃并拒绝检查链接,通常如果我连续运行两次脚本而没有太多暂停,就会发生这种情况。它有时会坐下来什么都不做。我已经编写了其他以这种方式有效地使用 getElementById 的抓取工具,并且它们很成功,尽管我只是通过检查元素是否存在来检查它是否为 !== null。手动检查,这个元素确实存在于我正在检查的所有页面中,只是它有时有内容,有时没有(它是一个div(。无论如何,这是我的代码:
var fs = require('fs')
var urls = fs.read('urls.txt').split(''n');
var page;
page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';
function check_link(url){
page = require('webpage').create();
page.open(url, function(status){
if (status !== 'success') {
console.log('Unable to access network');
} else {
var error = page.evaluate(function() {
return document.getElementById('error-message');
});
console.log(error.childNodes.length);
fs.write('results.csv', error.childNodes.length + ', ' + url + ''n', 'a');
page.release();
setTimeout(next_link, 1000);
}
});
}
function next_link(){
var url = urls.shift();
console.log(url);
if(!urls){
phantom.exit(0);
} else{
check_link(url);
}
}
next_link();
PhantomJS 通过page.evaluate()
提供对沙盒页面上下文(DOM 上下文(的访问,并带有以下注释:
注意:
evaluate
函数的参数和返回值必须是简单的基元对象。经验法则:如果可以通过 JSON 序列化,那就没问题了。闭包、函数、DOM 节点等将不起作用!
因此,您不能将 DOM 节点传递出页面上下文,但您可以在页面上下文中使用它执行任何操作,然后传递结果。
var errors = page.evaluate(function() {
var e = document.getElementById('error-message');
return (e && e.childNodes) ? e.childNodes.length : -1
});
console.log(errors);
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 表追加而不附加最后一个元素
- 滚动到容器中的下一个元素-几乎到了
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript获取上一个元素的内容
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 在数组中的一个元素上设置多个值
- 无法选择除一个元素外的所有元素
- 使用jquery contains获取一个元素并添加类
- $(.class).empty总是缺少一个元素
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 如何在一个元素动画之后延迟
- jQuery转盘下一个元素没有滑入
- jquery从另一个元素中移除移除
- DIV怎么能像Javascript中的另一个元素一样工作呢
- 当知道同一hiearch中至少有一个元素时,遍历到元素.结构使用jquery
- 使用数据属性将HTML数据复制到另一个元素
- 如何选择给定类的上一个元素
- 动态修改一个元素,使其与给定的选择器匹配