如何在Web上执行POST以使用selenium-requests和Python登录网站

时间:2019-05-15 09:16:57

标签: python selenium selenium-webdriver python-requests selenium-chromedriver

我必须登录一个站点(例如,我将使用facebook.com)。我可以使用selenium管理登录过程,但是我需要通过POST来完成。我尝试使用请求,但无法将所需的信息传递给Selenium Webdriver,以便以登录用户的身份进入站点。我发现在网上存在一个集成了硒和请求https://pypi.org/project/selenium-requests/的库,但是问题是没有文档,而且我陷入了同一个故事。

有硒要求

webdriver = Chrome()
url = "https://www.facebook.com"
webdriver.get(url)

params = {
    'email': 'my_email',
    'pass': 'my_password'
    }
resp = webdriver.request('POST','https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110', params) 

webdriver.get(url) 
# I hoped that the new page open was the one with me logged in but it did not works

使用Selenium并请求传递cookie

driver = webdriver.Chrome()
webdriver = Chrome()
url = "https://www.facebook.com"
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 = {
    'email': 'my_email',
    'pass': 'my_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('https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110', 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]
driver.get(url)

在两种情况下,如果最后我都打印cookie,似乎从一开始就有所更改,但是页面仍然是带有登录表单的页面。

这是我尝试过的代码,我进行了两次尝试,但足以找到这两种方法之一的解决方案。 有人可以帮助我并知道我该怎么做,或者更改为在我登录后打开页面?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我有同样的问题。 在您的代码中,您只需按原样传递参数。 在this example中,代码将在data=params中:

resp = webdriver.request('POST','https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110', params)