I would like to integrate python Selenium and Requests modules to authenticate on a website.
I am using the following code:
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())
The problem is that when I enter the browser the login authentication is still there when I try to access the url
even though I passed the cookies generated from the requests session.
How can I modify the code above to get through the authentication web page?
Advertisement
Answer
I finally found out what the problem was.
Before making the post
request with the requests
library, I should have passed the cookies of the browser first.
The code is as follows:
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)