5

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

有人可以为我指出正确的文档吗?假设 PhantomJS 是做到这一点的正确方法,我一直无法找到如何做这样的事情。也许有更简单的选择?

谢谢。

4

2 回答 2

16

您需要了解的是,phantomJS 有两个JavaScript 环境,这两个环境是相互独立的。内部是文档脚本(您在任何浏览器中都有)。外层是控制 phantomJS 应该做什么。它模拟用户。

因此,从某种意义上说,您需要告诉 phantomJS“用户打开了任何类型的 JavaScript 控制台...”。评估命令执行此操作。

因此,要读取变量的值foo,您可以编写以下代码:

var foo = page.evaluate(function() {
    return document.foo;
});

注意:这document不是绝对必要的,但它有助于在开发人员的头脑中将两个环境分开。

于 2013-09-16T15:18:08.727 回答
6

亚伦的回答对我不起作用。也许它在 2013 年有效,但现在(2016 年),它不再适用于当前版本。在 Aaron 的示例中,foo返回一个承诺,而不是一个值。 console.log(foo)输出Promise { <pending> }

这是我想出的:

page
    .evaluate( function(){ return window.foo })
    .then ( function(foo){ console.log "foo = ", foo});

现在你真的得到了 foo 的值。

于 2016-03-04T15:10:53.247 回答