Вход в PhantomJS/CasperJS, файлы cookie не принимаются PhantomJS

Недавно я попытался войти в веб-сайт, который заставляет меня принимать файлы cookie. Я использую phantomJs и casperJs. Я написал немного script, который должен обрабатывать логин, но перенаправляет меня на сайт, который говорит мне, что я должен принимать файлы cookie. Email и пароль - это просто заполнители.

Сайт, на котором я хочу войти, https://de.buyvip.com/. Но мне нужно нажать кнопку Anmelden mit Amazon, чтобы я мог войти в свою учетную запись amazon. Другая форма входа не работает. (Это приводит к этому длинному URL-адресу, я просто скопировал его из своего браузера)

Может кто-нибудь мне помочь?

Вот script:

    var casper = require("casper").create()
    var fs = require('fs');
    var page = "https://www.amazon.de/ap/signin?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&pageId=quarterdeckde&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&clientContext=280-1158662-4507036&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&marketPlaceId=A38GABX06X24K&openid.assoc_handle=quarterdeckde&openid.return_to=https%3A%2F%2Fde.buyvip.com%2Fsignin&openid.pape.max_auth_age=0&siteState=http%3A%2F%2Fde.buyvip.com%2Fhomepage%3Fhash%3DM";

    phantom.cookiesEnabled = true;

    casper.start(page, function()
    {
        console.log("started");
        this.fill('form#ap_signin_form', {
            'email' : 'myMail',
            'password' : 'myPass'
        }, true);
    });

casper.then(function()
{
    fs.write("test.html", this.getHTML(), "w");
});

    casper.run();

Ответ 1

Может быть, немного позже, но это ответ:

casper.userAgent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');

cookie не работает, потому что амазонке не нравится пользовательский агент casper по умолчанию, в моем случае: "Mozilla/5.0 (Macintosh, Intel Mac OS X) AppleWebKit/534.34 (KHTML, например, Gecko) CasperJS/1.0.2 + Phantomjs/1.7.0 Safari/534.34"

Ответ 2

Моя задача состояла в том, чтобы сделать Phantom script, который войдет на веб-сайт Amazon.

Если вы запустите Phantom с помощью phantom.javascriptEnabled = true; и попробуйте войти в Amazon с помощью username и password, вы получите сообщение об отключенном JavaScript, то есть Javascript не сможет выполнить. Когда JS не включен, вы не можете войти в систему на Amazon, потому что файлы cookie не работают.

Amazon выполняет небольшой JS-код для установки и удаления cookie перед входом в систему, вот часть исходного кода:

function setCookie(c_name,value,expiredays)
    {
        var exdate=new Date();
        exdate.setDate(exdate.getDate()+expiredays);
        document.cookie=c_name+ "=" +escape(value)+
            ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
    }

function checkCookieEnabled(nodeId)
        {
            setCookie('amznTest','1',null);
            if(getCookie('amznTest')){
                deleteCookie('amznTest');
            }else{
                document.getElementById(nodeId).style.display = 'block';
            }
        }
        checkCookieEnabled('message_warning');

После нескольких часов обхода вы должны установить page.settings.javascriptEnabled = true; и не только phantom.javascriptEnabled, и все работает плавно (для меня).

Включить выполнение javascript для объекта phantom:

phantom.cookiesEnabled = true;

Включить выполнение javascript для вашего объекта page (важно):

 var webPage = require('webpage');
    var page = webPage.create();
    page.settings.javascriptEnabled = true;
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36';

Теперь просто отправьте форму, используя ваши username и password, и вы можете войти в систему.

UPDATE:

Вот действительно хороший ресурс Как войти в Amazon с помощью PhantomJS. Такой же шаблон можно использовать для входа в любой другой веб-сайт.