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

1

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

В течение многих лет у меня были скрипты для входа/вызова. Но недавно Амазонка начала предлагать каптчи. Мой старый способ соскабливания был от 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();

Результатом этой последней строки является только страница входа с captcha. Что дает? Это должен быть обычный браузер. Когда я использую тот же логин на своем компьютере, у меня вообще нет проблем.

Я также пробовал несколько строк пользовательского агента. Иногда меняются эти работы временно.

Кроме того, когда я загружаю все это локально, он отлично работает. Но на сервере Linux он получает капчу. Обратите внимание, что я неоднократно менял IP-адрес удаленного сервера Linux. Он по-прежнему получает капчу.

  • 0
    Вы пробовали использовать банку печенья, чтобы сохранить куки?
  • 0
    У меня есть опция --cookies-file при запуске casper, cookie jar не делает, так как для cURL, так как он просто вызывает скрипт узла на другом сервере. Это тот, который должен сохранить куки. Похоже, что это не так, хотя куки пишутся.
Показать ещё 7 комментариев
Теги:
amazon-web-services
web-scraping
phantomjs
casperjs

1 ответ

0

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

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

  • 0
    Чтобы разработать для других пользователей, в прошлом изменение IP работал. Но каждый IP в центре обработки данных, который я пробовал, был заблокирован. Так было всего ассортимента. Поэтому я переместил подачу в новый центр данных и сделал свой сценарий более похожим на человека, чтобы в будущем его не заблокировали.
  • 0
    В моем случае я каждый раз входил в систему и неправильно использовал cookie, поскольку флаг командной строки CasperJS не работает. Мне пришлось самостоятельно сохранять и восстанавливать куки с помощью fs.write
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню