Selenium: Essayer de se connecter avec des cookies - "Ne peut que définir des cookies pour le domaine actuel"
Ce que je suis en train de réaliser
Je suis en train d'essayer de se connecter à un site web où les cookies doivent être activés à l'aide de Sélénium décapité, je suis à l'aide de PhantomJS pour le conducteur.
Problème
J'ai d'abord enregistré la procédure à l'aide de Selenium IDE dans lequel il fonctionne très bien avec Firefox (pas la tête). J'ai ensuite exporté le code Python et maintenant je ne peux pas me connecter parce que c'est de lancer une erreur en disant "ne Peut placer des Cookies pour le domaine courant". Je ne sais pas pourquoi je reçois ce problème, je ne suis pas sur le bon nom de domaine?
Code
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import unittest, time, re
self.driver = webdriver.PhantomJS()
self.driver.implicitly_wait(30)
self.base_url = "https://login.example.com"
driver = self.driver
driver.get(self.base_url)
all_cookies = self.driver.get_cookies()
# It prints out all cookies and values just fine
for cookie in all_cookies
print cookie['name'] + " --> " + cookies['value']
# Set cookies to driver
for s_cookie in all_cookies:
c = { s_cookie['name'] : s_cookie['value']}
# This is where it's throwing an error saying "Can only set Cookies for current domain
driver.add_cookie(c)
...
Ce que j'ai essayé
J'ai essayé de sauver les cookies dans un dict, d'aller à un autre domaine, le retour à l'origine de domaine et ajouté les cookies et ensuite essayer de me connecter mais ça ne fonctionne toujours pas (comme suggéré dans ce fil)
Toute aide est appréciée.
source d'informationauteur simeg
Vous devez vous connecter pour publier un commentaire.
Enquêter sur chaque cookies paires. J'ai couru dans les questions similaires et certains cookies appartenait à Google. Vous devez assurez-vous que les cookies sont ajoutés uniquement pour le Domaine courant, et aussi appartenir au même Domaine. Dans ce cas, l'exception n'est prévue. Sur une note de côté, si je me souviens correctement, vous ne pouvez pas utiliser
localhost
à ajouter les cookies si vous le faites. Changement d'adresse IP. Aussi, enquêter sur les cookies que vous obtenez spécialement de domaine et la date de péremption de l'information. Voir, si ils sont de retournull
Modifier
J'ai fait ce test simple sur Gmail pour montrer ce que vous avez fait de mal. Au premier coup d'oeil je n'ai pas remarqué que vous êtes en essayant de récupérer partielle cookie, une paire, et l'ajouter au domaine. Depuis, le cookie n'est pas n'importe quel Domaine, de chemin d'accès, la date d'expiration, etc. l'information qu'il était en train d'ajouter le cookie de domaine actuel(127.0.0.1) et en jetant quelques trompeuse info qui n'a pas tout à fait logique. Avis: pour être un cookie valide, il doit avoir le bon Domaine et d'expiration de l'information qui vous ont été portées disparues.
Je vais juste ajouter un commentaire sur le fond de ce que @Saifur dit ci-dessus, mais j'ai pensé que j'avais suffisamment de contenu pour justifier un commentaire entière.
La révélation pour moi, ayant exactement le même message d'erreur, est que l'utilisation de Sélénium fonctionne exactement de la même manière que si vous êtes réellement l'ouverture de votre navigateur et physiquement cliquant et en tapant des choses. Avec cela à l'esprit, si vous entrez le user/pass en Sélénium et appuyez sur
click()
votre Sélénium pilote, en cas de réussite authentican, automatiquement les cookies. Ainsi en niant n'importe quel besoin de casser dans ma sauvé (probablement va bientôt expirer) cookie. Je me sentais un peu ridicule la réalisation de ce. Tout fait donc beaucoup plus simple.À l'aide de @Saifur du code ci-dessus comme un modèle, j'ai fait quelques ajustements et enlevé ce que je ressens est un peu excessif de l'ensemble de la classe pour l'exécution de cet exemple.
à partir d'ici vous pouvez accéder à la page que vous voulez à l'adresse
remarque: si vous avez un site moderne que la détection automatique de charge lorsque vous faites défiler vers le bas, il peut être pratique d'utiliser cette:
Je tiens également à noter, @simeg, que le Sélénium automatiquement est censé attendre jusqu'à ce que la page est revenue qu'il est chargé (et oui, j'ai eu l'AJAX problème dont il est question, donc, il est parfois nécessaire d'attendre quelques secondes - ce que la page met plus de 30 secondes à charger?!). La façon dont vous exécutez votre commande d'attente est juste en attente pour PhantomJS à charge, pas la page elle-même si il semble d'aucune utilité pour moi, étant donné que le construit en fonction:
Espère que cela aide quelqu'un!
Sur certaines pages web, utiliser les touches trop grand nombre de dans le les cookies ne sont pas pris en charge par webdriver, alors vous obtenez un "errorMessage":"vous ne Pouvez définir des Cookies pour le domaine courant", même si vous êtes sûr à 100% que vous êtes définir des cookies pour le domaine courant. Un exemple d'une telle page web est "https://stackoverflow.com/". Dans ce cas, vous devez vous assurer que seules les clés sont ajoutées les cookies, comme mentionné dans certains posts précédents.
En contraste, certaines pages web utilisent trop peu de touches dans les cookies, qui sont requis par webdriver, alors vous obtenez un "errorMessage":"vous ne Pouvez définir des Cookies pour le domaine courant", après avoir résolu le premier problème. Un exemple d'une telle page web est "https://github.com/". Vous devez ajouter une clé de péremption " pour les cookies de ce site web.
De les mettre tous ensemble, le code complet est comme ci-dessous: