Amazon Продавец Центральный логин Scrape PhantomJS + CasperJS

Прежде всего я хочу сказать, что мы очищаем только свой собственный аккаунт, потому что моей компании нужны данные с нашей собственной панели инструментов, которые мы не можем получить из API MWS. я очень знакомы с этими API.

У меня были логины / скриптовые скрипты в течение многих лет. Но недавно Amazon начал предлагать капчи. Мой старый способ очистки был в том, что PHP делал cURL-запросы для имитации браузера.

Мой новый подход заключается в использовании PhantomJS и CasperJS для достижения того же эффекта. Все работало нормально в течение дня, но я снова получаю капчу.

Теперь из внутренних источников я узнаю, что Amazon не обнаруживает никаких соскобов. Они, однако, делают обнаружение хакерских / 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 это капча. Обратите внимание, что я много раз менял IP на удаленном сервере Linux. Это все еще капча.

1

Решение

Как это часто бывает при очистке / автоматизации, причиной ошибок является не обязательно неправильно написанный сценарий, но и контекст, лежащий в основе инфраструктуры.

В этом случае мы определили (в комментариях), что скрипт был подвергнут проверке с помощью капчи только при запуске с определенного сервера, IP-адрес которого, кажется, был помещен в ненадежный список.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector