web-dev-qa-db-fra.com

Python - Demandes, Selenium - transmission de cookies lors de la connexion)

Je souhaite intégrer python Selenium et modules Requests pour s'authentifier sur un site web.

J'utilise le code suivant:

import requests
from Selenium import webdriver

driver = webdriver.Firefox()
url = "some_url" #a redirect to a login page occurs
driver.get(url) #the login page is displayed

#making a persistent connection to authenticate
params = {'os_username':'username', 'os_password':'password'}
s = requests.Session()
resp = s.post(url, params) #I get a 200 status_code

#passing the cookies to the driver
driver.add_cookie(s.cookies.get_dict())

Le problème est que lorsque j'entre dans le navigateur, l'authentification de connexion est toujours là lorsque j'essaie d'accéder à url même si j'ai transmis les cookies générés à partir de la session de requêtes.

Comment puis-je modifier le code ci-dessus pour accéder à la page Web d'authentification?

Quelqu'un peut-il m'aider sur cette question?
Votre aide est très appréciée.
Meilleures salutations.

14
AntoG

J'ai finalement découvert quel était le problème. Avant de faire la demande post avec la bibliothèque requests, j'aurais dû d'abord passer les cookies du navigateur. Le code est comme suit:

import requests
from Selenium import webdriver

driver = webdriver.Firefox()
url = "some_url" #a redirect to a login page occurs
driver.get(url)

#storing the cookies generated by the browser
request_cookies_browser = driver.get_cookies()

#making a persistent connection using the requests library
params = {'os_username':'username', 'os_password':'password'}
s = requests.Session()

#passing the cookies generated from the browser to the session
c = [s.cookies.set(c['name'], c['value']) for c in request_cookies_browser]

resp = s.post(url, params) #I get a 200 status_code

#passing the cookie of the response to the browser
dict_resp_cookies = resp.cookies.get_dict()
response_cookies_browser = [{'name':name, 'value':value} for name, value in dict_resp_cookies.items()]
c = [driver.add_cookie(c) for c in response_cookies_browser]

#the browser now contains the cookies generated from the authentication    
driver.get(url)
22
AntoG

J'ai eu quelques problèmes avec ce code car il définit les doubles cookies sur le cookie de navigateur d'origine (avant la connexion), puis je résous ce problème en nettoyant les cookies avant de définir le cookie de connexion sur l'original. J'ai utilisé cette commande:

driver.delete_all_cookies()
0
Charlles Pimenta