web-dev-qa-db-fra.com

PhantomJS prend-il en charge les cookies?

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.

33
Niyaz

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é.

43
josh3736

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);
})
12
johndodo

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.

1
Derek Carr

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'     : '/'
0
jiahut

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 ...

0
Pooria Azimi