如何在phantomjs中设置代理

Ben*_*oft 13 proxy node.js phantomjs

这个https://www.npmjs.com/package/phantom#functionality-details页面说:

您还可以通过为phantom.create()指定其他参数来将命令行开关传递给phantomjs进程,例如:

phantom.create '--load-images=no', '--local-to-remote-url-access=yes', (page) ->
Run Code Online (Sandbox Code Playgroud)

或者通过在options*对象中指定它们:

phantom.create {parameters: {'load-images': 'no', 'local-to-remote-url-access': 'yes'}}, (page) ->
Run Code Online (Sandbox Code Playgroud)

这些示例仅在咖啡脚本中,并且它们暗示了create函数可以采用的

create('string',function)
Run Code Online (Sandbox Code Playgroud)

要么

create([object object],function)
Run Code Online (Sandbox Code Playgroud)

但真正的第一个参数是功能!

我真的很想尝试http://phantomjs.org/api/command-line.html我可能有错误的想法,但对我来说它看起来像是可以在创建函数中使用(就在你创建createPage之前),我我错了?

我尝试了几件事,最合乎逻辑的是:

var phantom = require('phantom');
phantom.create(function(browser){
    browser.createPage(function(page){
        page.open('http://example.com/req.php', function() {

            });},{parameters:{'proxy':'98.239.198.83:21320'}});});
Run Code Online (Sandbox Code Playgroud)

所以页面打开了.我知道这是因为我正在使req.php将$ _SERVER对象保存到txt pad但是,REMOTE_ADDR和REMOTE_PORT标头不是我设置的代理中的标头.它们没有效果.我也尝试过:

{options:{'proxy':'98.239.198.83:21320'}}
Run Code Online (Sandbox Code Playgroud)

当文档调用该对象时,选项* object*见上文^

'--proxy=98.239.198.83:21320'
Run Code Online (Sandbox Code Playgroud)

我还通过幻像模块挖掘了一下创建函数.它不是用js写的,我至少看不到它.它必须是C++.看起来此模块已更新,但模块内部的示例看起来像旧代码.

我该怎么做呢?

编辑:

var phantom = require('phantom');
phantom.create(function(browser){
    browser.createPage(function(page){

    browser.setProxy('98.239.198.83','21320','http', null, null, function(){

    page.open(
        'http://example.com/req.php', function() {

         });});});});
Run Code Online (Sandbox Code Playgroud)

这不会产生错误,页面会被删除但代理会被忽略.

小智 6

至于幻影2.0.10版本,以下代码在我的Windows机器上运行得很好

  phantom.create(["--proxy=201.172.242.184:15124", "--proxy-type=socks5"])
      .then((instance) => {
          phInstance = instance;
          return instance.createPage();
      })
      .then((page) => {
          sitepage = page;
          return page.open('http://newsdaily.online');
      })
      .then((status) => {
          console.log(status);
          return sitepage.property('title');
      })
      .then((content) => {
          console.log(content);
          sitepage.close();
          phInstance.exit();
      })
      .catch((error) => {
          console.log(error);
          phInstance.exit();
      });
Run Code Online (Sandbox Code Playgroud)


Ben*_*oft 4

{ parameters: { 'proxy': 'socks://98.239.198.83:21320' } }
Run Code Online (Sandbox Code Playgroud)

他们没有更新他们的文档。

  • node-phantom ..方法 --proxy=192.168.1.42:8080 --proxy-type=[http|socks5|none] 已合并在参数中,我看到了很长的讨论。 (2认同)