使用 PhantomJS 从网站读取 JavaScript 变量

Reading javascript variable from website using PhantomJS

本文关键字:JavaScript 变量 读取 网站 PhantomJS 使用      更新时间:2023-09-26

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

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

谢谢。

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

所以从某种意义上说,你需要告诉phantomJS"用户打开了JavaScript控制台任何键入..."。评估命令执行此操作。

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

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

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

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

这是我发现的:

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

现在你真的明白了foo的价值。