PhantomJS prend-il en charge les cookies? Si oui, où puis-je trouver les détails de l'API?
Je ne suis pas en mesure de le comprendre après avoir cherché pendant un certain temps maintenant.
Oui, à partir de 1.7 Phantom a une gestion complète des cookies, activée par défaut. Les cookies sont conservés pendant toute la durée de vie du processus.
Si vous souhaitez conserver les cookies sur plusieurs séries de Phantom, il y a option de ligne de commande cookies-file
où vous pouvez spécifier où stocker les cookies persistants.
--cookies-file=/path/to/cookies.txt
Spécifie le nom de fichier pour stocker les cookies persistants.
Dans le script de page, vous pouvez utiliser la propriété régulière document.cookie
. Comme dans les navigateurs, cette propriété renvoie une chaîne similaire à celle qui serait envoyée dans l'en-tête HTTP Cookie:
.
Dans le script Phantom, vous pouvez accéder aux cookies d'une page (sous réserve des restrictions d'origine habituelles) via page.cookies
, Qui renvoie des objets .
Vous pouvez également accéder aux cookies tous (de tous les domaines) en utilisant 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
});
Pour ajouter/modifier/supprimer des cookies , utilisez les méthodes addCookie
, deleteCookie
et clearCookies
d'un objet WebPage
ou l'objet phantom
.
Lorsque vous utilisez les méthodes d'un objet WebPage
, vous modifiez uniquement les cookies visibles sur la page. L'accès à d'autres domaines est bloqué.
Cependant, l'utilisation des méthodes de cookies de phantom
permet d'accéder aux cookies tous. phantom.addCookie
Nécessite un domaine (WebPage.addCookie
Suppose le domaine actuel si vous n'en spécifiez pas un) et phantom.deleteCookie
Supprime tout cookie correspondant au nom spécifié.
Cela fonctionne, par WebPage.addCookie () - ce qui (incidemment ne fonctionne pas ni pour moi ni quelqu'un sinon .
Vous pouvez utiliser ceci à la place:
phantom.addCookie({
'name': 'mycookie',
'value': 'something really important',
'domain': 'example.com'
})
page.open('http://example.com/url/path/', function() {
console.log(page.cookies);
})
Le travail que je devais faire était d'exécuter directement javascript. J'utilise Geb et j'ai fait ce qui suit:
js.exec("document.cookie='PHPSESSID=${cookie}';")
Lorsque Selenium échoue, je retombe toujours sur javascript pour les fonctionnalités.
J'avais noté les informations au cours de la session récemment. Vous devez définir un cookie dans l'objet de page, comme ci-dessous (coffeescript):
@page.clearCookies()
@page.addCookie
'name' : "JSESSIONID"
'value' : "0000rN3YAlVAU0xdHkKc6BEzWj9:-1"
'domain' : 'some.domain.com'
'path' : '/'
Je ne l'ai pas encore essayé, mais --cookies-file=/path/to/cookies.txt
travail?
C'est le premier élément dans API référence ...