【问题标题】:Casper --proxy doesn't workCasper --proxy 不起作用
【发布时间】:2013-05-30 08:05:11
【问题描述】:

这是我使用http://whatismyipaddress.com/proxy-check检查IP地址的代码

var casper = require("casper").create(),
    utils = require('utils');

casper.userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0');

casper.start("http://whatismyipaddress.com/proxy-check", function() {
  this.capture('0.png');
});

casper.on('remote.message', function(msg) {
    this.echo('Remote: ' + msg);
})

casper.run(function() {
  this.echo('End');

  //finish execution script 
  this.exit();  

});

我输入了casperjs --proxy="xxx.xxx.xxx.xxx:80" proxy.js 但截图正是我机器的IP地址。

那么我怎么知道代理是坏的还是我的代码或命令行有问题?

【问题讨论】:

  • 我运行了你的代码,它对我来说很好,当我使用代理时,我得到了不同的屏幕截图。代理是否需要身份验证?

标签: node.js proxy web-scraping phantomjs casperjs


【解决方案1】:

如果要测试casperjs是否成功使用代理服务器,可以使用以下脚本测试。它向whatismyip.com发出请求并打印casperjs使用的IP地址。

//create casper object
var casper = require('casper').create();

casper.start('http://www.whatismyip.com/');

//to avoid 'Access Denied'  <!-- Error #1010 -->
//The owner of this website (www.whatismyip.com) has banned  
//your access based on your browser's signature (42c0a6c6-cl-ua-50). (Ref. 1010)
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');

//Home Page
casper.then(function() {

    if(this.exists('div#greenip')){

        var element = this.evaluate(function() {
            //remove unnecessari nodes
            return jQuery('div#greenip').text().trim();
        });

        console.log(element);   
    }else{
        console.log("ACCESS_DENIED");   
    }    

});

casper.run(function() {

    //finish execution script 
    this.exit();
});

输出:

casperjs --proxy=XXX.XXX.XXX.XXX:60099 --proxy-auth=username:password proxy.js
XXX.XXX.XXX.XXX

【讨论】:

  • 截至 2014 年 1 月,#greenip 元素不存在
  • 2015 年 2 月,将 #greenip 替换为 #ip-box &gt; div.ip-box-left &gt; div.the-ip
【解决方案2】:

使用 http://ip-addr.es/ 的更短的 casperjs 脚本

var casper = require('casper').create();
var url = 'http://ip-addr.es/';

casper.start(url, function() {
    var js = this.evaluate(function() {
        return document; 
    }); 
    this.echo(js.all[0].outerText); 
});
casper.run();

假设您已将之前的脚本保存为 whatismyip.js,并且您有一个 SOCKSv5 代理在 localhost 端口 8000 上侦听,那么您可以检查 casperjs 当前是否使用代理为:

simone@tramontana:~$ casperjs  whatismyip.js 
93.[xx].[xx].226 # I've hidden a couple of bytes of my real IP ;)

simone@tramontana:~$ casperjs --proxy=127.0.0.1:8000 --proxy-type=socks5 whatismyip.js 
46.23.73.4

【讨论】:

  • 请不要从页面上下文返回非原始对象 (evaluate())。这在 PhantomJS 中非常容易出错。 js.all 可能是空的。
【解决方案3】:

我运行了你的代码,它对我来说很好

在没有代理的情况下运行脚本。

casperjs proxy.js

使用代理运行脚本。

casperjs --proxy=208.72.118.16:60099 --proxy-auth=username:password proxy.js

【讨论】:

  • 这是否意味着我的命令行的引号有误?因为没有授权。我从这里得到了一些样品hidemyass.com/proxy-list
  • 引号不应影响命令。我猜问题出在您使用的代理上。
  • 我尝试使用 hidemyass.com 的免费代理运行您的代码示例:[casperjs --proxy=152.1.150.52:8080 proxy.js] 一些代理工作,但其他人没有。
  • 那么我们如何知道代理是否不起作用?因为casperjs基本都是使用当前机器的IP
  • 如果您没有指定代理,casperjs 默认使用您当前机器的 IP,为了确定 casperjs 是否为每个请求使用代理,您可以创建一个脚本测试来获取 ip来自whatismyip.com
猜你喜欢
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多