使用 PhantomJS 在 HTML 中访问 JS 全局变量的值

Posted

技术标签:

【中文标题】使用 PhantomJS 在 HTML 中访问 JS 全局变量的值【英文标题】:Accessing values of JS Global variables in HTML with PhantomJS 【发布时间】:2018-02-03 03:11:45 【问题描述】:

所以我有一段看起来像这样的 html

<html>
  <body>
    <script>
      var foo = 
        bar: []
      ;
    </script>
  </body>
</html>

我正在尝试使用 PhantomJS 来提取 foo.bar 的值。我该怎么做?到目前为止,我知道我的结构是这样的:

var webPage = require('webpage'); 
var page = webPage.create();
page.open(MY_URL, function(status) 
  var foo = page.evaluate(function()
    //gets javascript from the HTML in the response
    // and extracts foo from there
  );
);

console.log(someVar);
phantom.exit();

【问题讨论】:

【参考方案1】:

您可以这样做,从幻像虚拟浏览器打开 url,并从带有幻像的网页中获取 javascript 返回值

const phantom = require('phantom');


openUrl = (req, res, next) => 
    let url = 'your url goes here';
    const content, returnedFromPage = await loadJsSite(url);
    return res.json(returnedFromPage);


loadJsSite = async (url) => 
  return new Promise( async (resolve, reject) => 

    const instance = await phantom.create();
    const page = await instance.createPage();
    await page.on('onResourceRequested', function(requestData) 
      console.info('Requesting', requestData.url);
    );

    const status = await page.open(url);
    var returnedFromPage = await page.evaluate(function() 
            return document.title;
        );
    const content = await page.property('content');

    await instance.exit();

    return resolve(content: content, returnedFromPage: returnedFromPage);

  )

【讨论】:

【参考方案2】:

看来你应该可以使用

var foo = page.evaluate(function() 
  return window.foo
)
console.log('foo =', foo)

【讨论】:

我应该可以。但是,有一个问题。虽然我可以运行window.foo,但我无法访问foo.bar 数组,即使在我输入console.log(Object.keys(foo)); 时出现bar @TheLegendOfCode 在这种情况下,您上面的示例似乎很糟糕 我将return window.foo 更改为return JSON.stringify(window.foo),它说foo.bar 完全是空的。但是,当我将 URL 扔到 google 并在控制台中打印 foo.bar 时,它已经满了。 @TheLegendOfCode 显然在页面初始加载后填充了 foo.bar 数组。就像我说的,你的例子并不代表现实

以上是关于使用 PhantomJS 在 HTML 中访问 JS 全局变量的值的主要内容,如果未能解决你的问题,请参考以下文章

使用带有量角器的phantomjs访问iframe中的web元素

使用 javascript (phantomjs) 导航/抓取 hashbang 链接

使用 Phantomjs Watir 访问 iFrame

MAC 上的Phantomjs的安装和配置

python+selenium自动化软件测试(第6章):selenium phantomjs页面解析使用

PhantomJS 无法访问自签名 HTTPS 页面 Codeception