我必须登录一个站点(例如,我将使用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,似乎从一开始就有所更改,但是页面仍然是带有登录表单的页面。
这是我尝试过的代码,我进行了两次尝试,但足以找到这两种方法之一的解决方案。 有人可以帮助我并知道我该怎么做,或者更改为在我登录后打开页面?
提前谢谢!
答案 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)