Подтвердить что ты не робот

Как использовать сохраненные файлы cookie из файла с помощью phantomjs

У меня есть определенная проверка подлинности, чтобы попасть на конкретный URL-адрес. В браузере мне нужно войти только один раз, как и для других связанных URL-адресов, которые могут использовать идентификатор сеанса из файла cookie, который не требуется, чтобы перейти на страницу входа. Аналогично, могу ли я использовать файл cookie, сгенерированный в файле cookie, используя --cookies-file=cookies.txt в командной строке в phantomjs, чтобы открыть другую страницу, для которой требуется такая же деталь файла cookie.

Просьба предложить.

4b9b3361

Ответ 1

Phantom JS и файлы cookie

--cookies-file=cookies.txt хранит файлы cookie без сеанса в банке cookie. Вход и аутентификация чаще всего основаны на кукисах сеансов.

Как насчет файлов cookie?

Чтобы сохранить их, достаточно просто, но вы должны учитывать, что они, скорее всего, быстро истекут.

Вам нужно написать свою логику программы, чтобы рассмотреть это. Например

  • Загрузка файлов cookie из файла cookiejar
  • Нажмите URL, чтобы проверить, зарегистрирован ли пользователь
  • Если вы не вошли в систему

    Войти, Сохранить файлы cookie в cookiejar

  • продолжить обработку

Пример

var fs = require('fs');
var CookieJar = "cookiejar.json";
var pageResponses = {};
page.onResourceReceived = function(response) {
    pageResponses[response.url] = response.status;
    fs.write(CookieJar, JSON.stringify(phantom.cookies), "w");
};
if(fs.isFile(CookieJar))
    Array.prototype.forEach.call(JSON.parse(fs.read(CookieJar)), function(x){
        phantom.addCookie(x);
    });

page.open(LoginCheckURL, function(status){
 // this assumes that when you are not logged in, the server replies with a 303
 if(pageResponses[LoginCheckURL] == 303)
 {  
    //attempt login
    //assuming a resourceRequested event is fired the cookies will be written to the jar and on your next load of the script they will be found and used
 }


});

Ответ 2

Файл, созданный с помощью опции --cookies-file=cookies.txt, сериализуется из CookieJar: есть дополнительные символы, и иногда это трудно разобрать.

Он может выглядеть так:

[General]
cookies="@Variant(\0\0\0\x7f\0\0\0\x16QList<QNetworkCookie>\0\0\0\0\x1\0\0\0\v\0\0\0{__cfduid=da7fda1ef6dd8b38450c6ad5632...

Я использовал в прошлом phantom.cookies. Этот массив будет предварительно заполнен любыми существующими данными Cookie, хранящимися в файле cookie, указанном в параметрах запуска/командной строки PhantomJS, если таковые имеются. Но вы также можете добавить динамический файл cookie с помощью phantom.addCookie.

Основным примером является

phantom.addCookie({
    'name':     'Valid-Cookie-Name',   /* required property */
    'value':    'Valid-Cookie-Value',  /* required property */
    'domain':   'localhost',           /* required property */
    'path':     '/foo',
    'httponly': true,
    'secure':   false,
    'expires':  (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
});

С помощью этих методов не так сложно реализовать свою собственную логику управления файлами cookie.