Python请求-会话未捕获响应Cookie

时间:2020-09-12 21:29:04

标签: python session cookies python-requests

我不确定该如何描述。我正在尝试使用带有Python的请求库登录网站,但似乎并没有捕获我登录时的所有cookie,随后对该站点的请求又返回到登录页面。

我正在使用的代码如下:(带有修订)

with requests.Session() as s:
    r = s.post('https://www.website.co.uk/login', data={
        'amember_login': 'username',
        'amember_password': 'password'
    })

查看Chrome中的开发者工具。我看到以下内容: enter image description here

检查r.cookies后,似乎只有PHPSESSID被捕获,没有amember_nr cookie的迹象。

PyCharm中的值仅显示:

{RequestsCookieJar: 1}<RequestsCookieJar[<Cookie PHPSESSID=kjlb0a33jm65o1sjh25ahb23j4 for .website.co.uk/>]>

为什么此代码无法保存'amember_nr',并且有什么方法可以检索它?

解决方案

使用Selenium,选择页面上的元素并自动键入/单击,似乎是使此代码正常工作的唯一方法。以下代码可产生预期的结果。

from seleniumrequests import Chrome

driver = Chrome()
driver.get('http://www.website.co.uk')
username = driver.find_element_by_xpath("//input[@name='amember_login']")
password = driver.find_element_by_xpath("//input[@name='amember_pass']")

username.send_keys("username")
password.send_keys("password")

driver.find_element_by_xpath("//input[@type='submit']").click() # Page is logged in and all relevant cookies saved.

2 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

with requests.Session() as s:
    s.get('https://www.website.co.uk/login')
    r = s.post('https://www.website.co.uk/login', data={
        'amember_login': 'username',
        'amember_password': 'password'
    })

获取请求将设置所需的cookie。

答案 1 :(得分:0)

仅供参考,我会使用 BurpSuite 之类的东西来捕获发送到服务器的所有数据并整理出需要哪些标头等......有时人们/服务器要检查引用,通过 JAVA 或奇怪的脚本设置 cookie,甚至看到了 java混淆和阻止不在白名单中的代理标签等......这可能是服务器缺少的标头为您提供 cookie。

您也可以让 Python 使用 burp 作为代理,这样您就可以准确查看发送到服务器的内容和响应。

https://github.com/freeload101/Python/blob/master/CS_HIDE/CS_HIDE.py(代理支持)

相关问题