使用PhantomJS从网站上读取javascript变量

时间:2013-09-16 14:55:32

标签: javascript variables phantomjs

我是Javascript和PhantomJS的新手,但我看起来很简单的目标已经证明比预期更难实现。我想编写一个加载网站的脚本,然后输出该页面上使用的Javascript变量的值。如果我在浏览器中打开该页面并打开Javascript控制台,我可以输入变量名称,它会告诉我与所述变量相关的值。我只是尝试使用PhantomJS重现此功能,以便我可以自动执行此任务。

有人能指出我正确的文件吗?假设PhantomJS是正确的方法,我无法找到如何做这样的事情。也许还有一个更简单的选择?

感谢。

2 个答案:

答案 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的价值。