我使用this nodejs模块来解析HTML。我试图在我的HTML中找到id的元素。我无法获得文档对象。这是我的代码:
var phantom = require('phantom');
var fs = require('fs');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open('file://' + __dirname + '/content.txt', function (status) {
page.evaluate(function() {
// this code will never executed
document.getElementById('some_id');
});
ph.exit();
});
});
}, {
dnodeOpts: {
weak: false
}
});
答案 0 :(得分:2)
您的示例中没有验证代码。让我们看看我们在这里可以做些什么。
PhantomJS有两个上下文。 page.evaluate()
是一个沙盒函数,提供对DOM上下文(或页面上下文)的访问。问题是你不能从DOM上下文返回DOM节点,因为只能传递原始值。
如果要检查页面中是否有元素可用,可以执行以下操作:
page.open('file://' + __dirname + '/content.txt', function (status) {
page.evaluate(function _inDomContext() {
return !!document.getElementById('some_id');
}, function _inOuterContext(result){
console.log("result: " + result); // true or false
ph.exit();
});
});
以下是您应该注意的一些事项:
!!
将以下表达式的值计算为布尔值,该布尔值可以从DOM上下文中传出。ph.exit()
。别忘了考虑异步行为和潜在的回调。如果你想在phantomjs-node中等待特定条件(例如,某些元素是异步加载的),那么你可以使用this answer中的函数。