Поддерживает ли PhantomJS файлы cookie? Если да, где я могу найти информацию о API?
Я не могу понять это после поиска некоторое время.
Поддерживает ли PhantomJS файлы cookie? Если да, где я могу найти информацию о API?
Я не могу понять это после поиска некоторое время.
Да, с 1.7 Phantom имеет полную обработку файлов cookie, включенную по умолчанию. Куки сохраняются на протяжении всего процесса.
Если вы хотите сохранить файлы cookie в рамках Phantom, там параметр командной строки cookies-file
, где вы можете указать, где хранить постоянные файлы cookie.
--cookies-file=/path/to/cookies.txt
указывает имя файла для хранения постоянных файлов cookie.
На странице script вы можете использовать обычное свойство document.cookie
. Как и в браузерах, это свойство возвращает строку, аналогичную той, которая будет отправлена в заголовке Cookie:
HTTP.
В Phantom script вы можете получить доступ к файлам 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 jar
});
Чтобы добавлять/редактировать/удалять файлы cookie, используйте методы addCookie
, deleteCookie
и clearCookies
объекта WebPage
или phantom
.
Когда вы используете методы объекта WebPage
, вы изменяете только файлы cookie, видимые на странице. Доступ к другим доменам заблокирован.
Однако использование методов cookie phantom
позволяет получить доступ ко всем файлам cookie. phantom.addCookie
требуется домен (WebPage.addCookie
принимает текущий домен, если вы его не укажете), а phantom.deleteCookie
удаляет файл любой cookie, соответствующий указанному имени.
Он делает через 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);
})
Работа, которую я должен был сделать, - это выполнить javascript напрямую. Я использую Geb и сделал следующее:
js.exec("document.cookie='PHPSESSID=${cookie}';")
Когда selenium не удается, я всегда возвращаюсь к javascript для функциональности.
Я еще не пробовал, но работает --cookies-file=/path/to/cookies.txt
?
Это первый элемент в API ссылка...
Недавно я просмотрел информацию на сессии. Вы должны установить cookie в объект страницы, например ниже (coffeescript):
@page.clearCookies()
@page.addCookie
'name' : "JSESSIONID"
'value' : "0000rN3YAlVAU0xdHkKc6BEzWj9:-1"
'domain' : 'some.domain.com'
'path' : '/'