Transmettez le cookie de session de connexion obtenu à partir des requêtes Python au navigateur Selenium pour vous connecter.

Qu'est-ce que tu dis

Supposons que vous ayez une application Web dont le client est censé être autre chose qu'un navigateur Web, comme une application mobile.

Supposons qu'il ne dispose pas d'une page de connexion comme vous le verriez dans un service Web typique. En effet, l'application cliente contient un formulaire de connexion.

Cependant, lorsque je fais des tests automatiques, je veux y accéder à partir du navigateur Selenium et voir comment cela fonctionne. À ce moment-là.

code

python


import requests
from selenium import webdriver

cookie_name = 'session_id'

#Connectez-vous avec les demandes et créez un cookie de session
s = requests.session()
login_data = {
    'email': '[email protected]',
    'password': 'xxxxxxxxxx',
}
res = s.post('https://example.com/login/', data=login_data)
res.raise_for_status()

#Valeur du cookie de session
cookie_value = s.cookies.get(cookie_name)

#Démarrez Firefox
driver = webdriver.Firefox()
#Ouvrez à l'avance une page appropriée pour le domaine cible.
#Si vous ne le faites pas, ajoutez_J'obtiens une erreur avec un cookie
driver.get('https://example.com/')
#Passer le cookie de session obtenu par les requêtes à Firefox
driver.add_cookie({
        'name': cookie_name,
        'value': cookie_value,
        'domain': 'example.com'})
#Afficher la page après la connexion
driver.get('https://example.com/mypage/')

Vous pouvez maintenant voir la page après vous être connecté à Firefox.

La méthode add_cookie fonctionne également dans webdriver.Chrome, vous pouvez donc vous connecter de la même manière. Peut-être que d'autres pilotes Web fonctionneront également.

Exemple qui était inutile

Lorsque j'ai créé du HTML d'un formulaire approprié localement et que j'ai défini son action = comme URL de connexion, il a été demandé par GET pour une raison quelconque, même si method = "POST". Il semble que les navigateurs récents ne puissent plus envoyer par POST entre les domaines, probablement pour des raisons de sécurité.

Si vous faites de votre mieux, un plan qui ne sera possible qu'avec du sélénium

Vous pourrez peut-être vous connecter en ouvrant la page appropriée du domaine auquel vous vous connectez dans Selenium, en créant un formulaire de connexion dans JS et en envoyant un POST à partir de là. Mais cela semble difficile, donc je ne l'ai pas fait.

Recommended Posts

Transmettez le cookie de session de connexion obtenu à partir des requêtes Python au navigateur Selenium pour vous connecter.
Connectez-vous à Slack à l'aide de requêtes en Python
Connectez-vous à Yahoo Business avec Selenium Python
Connectez-vous au site Web en Python
Comment déterminer l'existence d'un élément sélénium en Python
Python dans le navigateur: la recommandation de Brython
Dans la commande python, python pointe vers python3.8
[pepper] Transmettez toutes les données JSON obtenues par requête python à la tablette.
Trier les noms de fichiers obtenus par Python glob dans l'ordre numérique
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
[Python] Comment définir la taille de la fenêtre (cliente) dans le navigateur avec Selenium
Un exemple de réponse à la question de référence de la session d'étude. Avec python.
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Afficher Python 3 dans le navigateur avec MAMP
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
[Python] Utiliser automatiquement le navigateur avec Selenium
Comment lire toutes les classes contenues dans * .py dans le répertoire spécifié par Python
Comment utiliser la bibliothèque C en Python
Connectez-vous à un serveur distant avec SSH
Analysons le journal de validation git en Python!
Pour remplacer dynamiquement la méthode suivante en python
Dessinez des graphiques dans Julia ... Laissez les graphiques à Python
Comment spécifier la version TLS dans les requêtes python
Conseils pour rédiger un aplatissement concis en python
Comment effacer les caractères générés par Python
Comment obtenir les fichiers dans le dossier [Python]
Connectez-vous avec json en utilisant pygogo.
Exécutez Power Query en passant des arguments à Python
Je veux afficher la progression en Python!
Ouvrez la page en mode secret en spécifiant la langue du navigateur avec les liaisons Selenium Python (Chrome)
Faisons un saut dans l'industrie manufacturière en utilisant le Web en plus de Python
Comment récupérer la nième plus grande valeur en Python
J'ai essayé de représenter graphiquement les packages installés en Python
Lorsque "Message: session non créée" se produit dans Python + Selenium
Comment obtenir le nom de la variable lui-même en python
Téléchargez l'image téléchargée par requêtes directement vers S3
Notez les options fréquemment utilisées dans Python + Selenium + Chrome
Lisez le fichier xml en vous référant au didacticiel Python
Convertissez l'image au format .zip en PDF avec Python
J'étais accro au grattage avec Selenium (+ Python) en 2020
Obtenez la valeur sélectionnée dans le menu déroulant Selenium Python VBA
Écrire des données dans KINTONE à l'aide du module de requêtes Python
Décale la chaîne de l'alphabet de N caractères en Python
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Je veux écrire en Python! (3) Utiliser des simulacres
Comment utiliser le modèle appris dans Lobe en Python
Essayez de déchiffrer les données de connexion stockées dans Firefox
[Python] Comment afficher les valeurs de liste dans l'ordre
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Je veux utiliser le jeu de données R avec python
Python Open CV a essayé d'afficher l'image sous forme de texte.
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Comment vérifier si le contenu du dictionnaire est le même en Python par valeur de hachage
[Selenium] Je souhaite afficher le navigateur en appuyant sur le pilote du système d'exploitation hôte à partir de WSL