我写了一个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
请问这是什么原因以及解决办法。
如有任何帮助,我们将不胜感激
两年后,这个问题将会得到解答:)我相信这会对其他人有所帮助。
从错误日志中,我可以看到问题发生在第 10 行,您尝试在
get查询中使用 Session 对象中的
RequestsCookieJar
类型的 cookie,而 docs 表示 cookies 参数必须是:
cookies –(可选)与请求一起发送的Dict或CookieJar对象
问题的解决方案是从 RequestsCookieJar 对象中提取 cookie,并以 Dict 或 CookieJar 的形式传递它们。
例如,
response_with_cookies.cookies.get("cookie_key")
将返回“cookie_key”值。然后您可以使用所需的键和值对来形成您自己的对象。
提取值并将 RequestsCookieJar 转换为此处
描述的有效对象