我是Javascript和PhantomJS的新手,但我看起来很简单的目标已经证明比预期更难实现。我想编写一个加载网站的脚本,然后输出该页面上使用的Javascript变量的值。如果我在浏览器中打开该页面并打开Javascript控制台,我可以输入变量名称,它会告诉我与所述变量相关的值。我只是尝试使用PhantomJS重现此功能,以便我可以自动执行此任务。
有人能指出我正确的文件吗?假设PhantomJS是正确的方法,我无法找到如何做这样的事情。也许还有一个更简单的选择?
感谢。
答案 0 :(得分:15)
您需要了解的是,phantomJS具有两个 JavaScript环境,并且这两个环境彼此独立。内部文件是文档脚本(在任何浏览器中都有)。外面的一个是控制phantomJS应该做什么。它模拟用户。
所以从某种意义上讲,你需要告诉phantomJS“用户打开任何类型...
的JavaScript控制台”。 evaluate command执行此操作。
因此,要读取变量foo
的值,请编写以下代码:
var foo = page.evaluate(function() {
return document.foo;
});
注意:document
并非绝对必要,但它有助于将两个环境分开放在开发人员的头脑中。
答案 1 :(得分:5)
亚伦的回答对我不起作用。也许它在2013年有效,但现在(2016年),它不再适用于当前版本。在Aaron的例子中,foo
返回一个promise,而不是一个值。 console.log(foo)
输出Promise { <pending> }
。
以下是我的想法:
page
.evaluate( function(){ return window.foo })
.then ( function(foo){ console.log "foo = ", foo});
现在你真的得到了foo的价值。