我想首先说我们只抓自己的帐户,因为我的公司需要来自我们自己的仪表板的数据,而这些数据是我们无法从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。它仍然是验证码。
答案 0 :(得分:0)
由于在抓取/自动化中经常发生错误的原因不一定是错误编写脚本,而是上下文,底层基础架构。
在这种情况下,我们确定(在评论中)脚本仅在从特定服务器运行时才使用验证码进行挑战,其中IP地址似乎已放入不受信任的列表中。