Поддерживает ли PhantomJS файлы cookie? - PullRequest
33 голосов
/ 29 февраля 2012

Поддерживает ли PhantomJS файлы cookie? Если да, где я могу найти детали API?

Я не могу понять это после поиска некоторое время сейчас.

Ответы [ 5 ]

43 голосов
/ 29 февраля 2012

Да, по состоянию на 1.7 В Phantom полная обработка файлов cookie включена по умолчанию.Файлы cookie сохраняются в течение всего срока службы процесса.

Если вы хотите сохранить файлы cookie при запуске Phantom, есть опция командной строки cookies-file, в которой можно указать, гдедля хранения постоянных файлов cookie.

--cookies-file=/path/to/cookies.txt указывает имя файла для хранения постоянных файлов cookie.

В скрипте страницы можно использовать обычное свойство document.cookie.Как и в браузерах, это свойство возвращает строку, аналогичную той, которая будет отправлена ​​в заголовке HTTP Cookie:.

В сценарии Phantom вы можете получить доступ к файлам cookie для страницы (с учетом обычных ограничений источника) черезpage.cookies, который возвращает объектов .

Вы также можете получить доступ к всем cookie-файлам (из всех доменов), используя phantom.cookies.

var page = require('webpage').create();
page.open('http://example.com', function (status) {
    page.evaluate(function() {
        document.cookie; // => "test=test-value;"
    });
    page.cookies; // => [{
                  //   domain: "example.com",
                  //   expires: "Wed, 08 Jan 2014 00:00:00 GMT"
                  //   httponly: false,
                  //   name: "test",
                  //   path: "/",
                  //   secure: false,
                  //   value: "test-value"
                  // }]
    phantom.cookies; // contains ALL cookies in Phantom's jar
});

Для добавления / редактирования / удаления файлов cookie используйте методы addCookie, deleteCookie и clearCookies для объекта WebPage или phantom.

При использовании методов объекта WebPage вы изменяете только те файлы cookie, которые видны на странице.Доступ к другим доменам заблокирован.

Однако использование файлов cookie phantom позволяет получить доступ к всем cookie.phantom.addCookie требуется домен (WebPage.addCookie предполагает текущий домен, если вы его не указали), а phantom.deleteCookie удаляет любой cookie, соответствующий указанному имени.

12 голосов
/ 13 сентября 2013

Это происходит через WebPage.addCookie () - что, кстати, не работает ни для меня, ни кого-то другого .

Вы можете использовать это вместо:

phantom.addCookie({
    'name': 'mycookie',
    'value': 'something really important',
    'domain': 'example.com'
})
page.open('http://example.com/url/path/', function() {
    console.log(page.cookies);
})
1 голос
/ 04 ноября 2016

Обходной путь, который я должен был сделать, заключался в непосредственном выполнении javascript.Я использую Geb и сделал следующее:

js.exec("document.cookie='PHPSESSID=${cookie}';")

Когда селен не удается, я всегда прибегаю к javascript для функциональности.

0 голосов
/ 23 июля 2014

Недавно я оценил информацию в рамках сессии. Вы должны установить cookie в объекте страницы, как показано ниже (coffeescript):

@page.clearCookies()
@page.addCookie
  'name'     : "JSESSIONID"
  'value'    : "0000rN3YAlVAU0xdHkKc6BEzWj9:-1"
  'domain'   : 'some.domain.com'
  'path'     : '/'
0 голосов
/ 29 февраля 2012

Я еще не пробовал, но --cookies-file=/path/to/cookies.txt не работает?

Это первый элемент в API ссылка ...

...