亚马逊卖家中央登录scrape phantomjs + casperjs[英] Amazon Seller Central Login Scrape PhantomJS + CasperJS

问题描述

我想开始说我们只刮擦自己的帐户,因为我的公司需要我们自己的仪表板的数据,而我们无法从MWS API中获得.我非常熟悉那些apis.

我已经有多年的登录/刮擦脚本了.但是最近,亚马逊开始提供验证码.我刮擦的旧方法是从php提出卷曲请求来模仿浏览器.

我的新方法是使用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.它仍然是验证码.

推荐答案

由于刮擦/自动化经常发生,错误的原因不一定是错误的脚本,而是上下文,基础结构的基础.

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

本文地址:https://www.itbaoku.cn/post/1740115.html