亚马逊卖家中央登录Scrape PhantomJS + CasperJS

时间:2015-12-04 00:04:26

标签: php amazon-web-services web-scraping phantomjs casperjs

我想首先说我们只抓自己的帐户,因为我的公司需要来自我们自己的仪表板的数据,而这些数据是我们无法从MWS API获得的。我非常熟悉那些API。

我已经登录/抓取脚本多年了。但最近亚马逊开始提供验证码。我的旧方法是从PHP制作cURL请求来模仿浏览器。

我的新方法是使用PhantomJS和CasperJS来达到同样的效果。一天都工作正常,但我再次获得验证码。

现在,我碰巧从内部消息来源了解亚马逊没有进行任何刮擦检测。然而,它们会进行黑客攻击/ DDOS攻击检测。所以我认为这个casperJS代码被标记为攻击。

我不认为我经常调用脚本。我已经更改了请求来自的IP地址。

这是一些casperJS代码

var fs = require('fs');
var casper = require('casper').create({
    pageSettings: {
        loadImages: false,
        loadPlugins: false,
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36'
    }
});

// use any cookies
var cookieFilename = "cookies/_cookies.txt";
var data = fs.read(cookieFilename);
if(data) {
    phantom.cookies = JSON.parse(data);
}

//First step is to open Amazon
casper.start("https://sellercentral.amazon.com/gp/homepage.html", function() {
    console.log("Amazon website opened");
});

casper.wait(1000, function() {
    if(this.exists("form[name=signinWidget]")) {
        console.log("need to login");
        //Now we have to populate username and password, and submit the form
        casper.wait(1000, function(){
            console.log("Login using username and password");
            this.evaluate(function(){
                document.getElementById("username").value="*****";
                document.getElementById("password").value="*****";
                document.querySelector("form[name=signinWidget]").submit();
            });
        });
        // write the cookies
        casper.wait(1000, function() {
            var cookies = JSON.stringify(phantom.cookies);
            fs.write(cookieFilename, cookies, 644);
        })
    } else {
        console.log("already logged in");
    }
});


//Wait to be redirected to the Home page, and then make a screenshot
casper.wait(1000, function(){
    console.log("is login found?");
    console.log(this.exists("form[name=signinWidget]"));
    this.echo(this.getPageContent());
});

casper.run();

最后一行的结果只是一个带验证码的登录页面。是什么赋予了?这应该是普通的浏览器。当我在计算机上使用相同的登录时,我完全没有问题。

我还尝试了几种不同的用户代理字符串。有时会暂时改变这些作品。

另外,当我在本地加载所有这些时,它工作正常。但是在linux服务器上它获得了验证码。请注意,我已多次更改远程Linux服务器上的IP。它仍然是验证码。

1 个答案:

答案 0 :(得分:0)

由于在抓取/自动化中经常发生错误的原因不一定是错误编写脚本,而是上下文,底层基础架构。

在这种情况下,我们确定(在评论中)脚本仅在从特定服务器运行时才使用验证码进行挑战,其中IP地址似乎已放入不受信任的列表中。