Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - Requests, Selenium - passing cookies while logging in

Tags:

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?

Can anyone help me on this issue?
Your help is much appreciated.
Best Regards.

like image 761
AntoG Avatar asked Feb 07 '17 10:02

AntoG


People also ask

Can you use Selenium and Requests together?

Extends Selenium WebDriver classes to include the request function from the Requests library, while doing all the needed cookie and request headers handling.


1 Answers

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) 
like image 151
AntoG Avatar answered Oct 10 '22 21:10

AntoG