3

在我的 phantomJS 脚本中,我想在使用 Phantom 抓取 HTML 内容之前发出一些 HTTP 请求以在 Phantom 中设置一些变量。

从 PhantomJS 执行 HTTP 请求的正确方法是什么?我应该使用 PageObject 并像处理网页一样处理它吗?或者我可以使用一些 XHR 功能吗?我想先获取一些 Json 数据。

4

1 回答 1

3

你有几个不同的选择要考虑。完成此操作的最简单方法是使用 WebPage 模块,打开包含您要加载的数据的页面的 URL,然后使用其他网页对象抓取其他页面。

var webpage = require('webpage');
var page = webpage.create()
page.open('<some url>', function(status) {
  var option1 = page.evaluate(function() { ... });
  var option2 = page.evaluate(function() { ... });

  another = webpage.create();
  another.open('<another url>', function(status) {
    another.evaluate(function(opt1, opt2) {

      // you have access to opt1 and opt2 here

    }, option1, option2);
  });
  page.close();
});

然后您可以访问“另一个”页面中的 option1 和 option2 变量。

另一种选择是使用上面提到的 Joe 的命令行参数。你甚至可以编写你的 PhantomJS 代码来接受变量的命令行参数,编写一个 Node.js/Python/Ruby 脚本来发出 Web 请求,解析它,并使用正确的命令行参数生成 PhantomJS 进程。

两者都可以,但是如果您想将代码保存在一个文件中,我将采用第一条路线。

于 2013-09-26T22:55:16.603 回答