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