将从selenium获取的cookie设置为python请求时出现“TypeError:预期字符串或类似字节的对象”

问题描述 投票:0回答:1

我写了一个selenium脚本来获取网站的cookie:

pickle.dump(driver.get_cookies() , open("cookies.pkl","wb")) 

我尝试将获取的cookie传递给请求

cookies = pickle.load(open("cookies.pkl", "rb"))

r = requests.Session()
for cookie in cookies:
    r.cookies.set(cookie['name'], cookie['value'])

但我收到此错误:

Traceback (most recent call last):
  File "c:\Users\maxis\Desktop\demo.py", line 10, in <module>
    res = r.get('https://www.douban.com/people/49407893/', headers={'User-Agent': 'M',}, cookies=cookies[0])
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\sessions.py", line 542, in get
    return self.request('GET', url, **kwargs)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\sessions.py", line 515, in request
    prep = self.prepare_request(req)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\sessions.py", line 443, in prepare_request
    p.prepare(
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\models.py", line 320, in prepare
    self.prepare_cookies(cookies)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\models.py", line 582, in prepare_cookies
    cookie_header = get_cookie_header(self._cookies, self)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\cookies.py", line 142, in get_cookie_header        
    jar.add_cookie_header(r)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\http\cookiejar.py", line 1367, in add_cookie_header
    attrs = self._cookie_attrs(cookies)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\http\cookiejar.py", line 1326, in _cookie_attrs
    self.non_word_re.search(cookie.value) and version > 0):
TypeError: expected string or bytes-like object

请问这是什么原因以及解决办法。

如有任何帮助,我们将不胜感激

python python-3.x selenium cookies python-requests
1个回答
0
投票

两年后,这个问题将会得到解答:)我相信这会对其他人有所帮助。

从错误日志中,我可以看到问题发生在第 10 行,您尝试在

get
查询中使用 Session 对象中的 RequestsCookieJar 类型的 cookie,而 docs 表示 cookies 参数必须是:

cookies –(可选)与请求一起发送的DictCookieJar对象

问题的解决方案是从 RequestsCookieJar 对象中提取 cookie,并以 Dict 或 CookieJar 的形式传递它们。

例如,

response_with_cookies.cookies.get("cookie_key")
将返回“cookie_key”值。然后您可以使用所需的键和值对来形成您自己的对象。

提取值并将 RequestsCookieJar 转换为此处

描述的有效对象
© www.soinside.com 2019 - 2024. All rights reserved.