我已经阅读了我能找到的与该主题相关的所有问题,但没有一个是有帮助和/或相关的。
我正在使用带有 Asyncio 和 aiohttp 的 playwright 来自动化一些基于 Web 的任务。该工作流程的一部分涉及获取和重用 cookie。我使用剧作家context.storage_state()
从存储中获取所有内容。它返回 adict
存储中的所有内容,如下所示:
{
"cookies": [
{
'name': 'cookie_name',
'value': 'cookie_value',
'domain': '.website.com',
'path': '/',
'expires': 1234567890,
'httpOnly': False,
'secure': False,
'sameSite': 'None'
},
...
],
"origins": [
{
"origin": "https://www.website.com",
"localStorage": [
{
"name": "name",
"value": "value"
},
...
]
}
]
}
我使用 cookie 抓取storage['cookies']
它们,然后遍历它们,尝试将每个添加到 中aiohttp.CookieJar()
,我很确定它只是一个http.cookiejar.CookieJar()
对象。每次我尝试将其中一个字典作为 cookie 加载到 cookie 罐中时,我都会得到一个
CookieError: Attempt to set a reserved key 'domain'
我查看了 RFC2109 标准和源代码:https ://github.com/python/cpython/blob/3.9/Lib/http/cookies.py
无论我尝试什么,我都会遇到错误。
我努力了:
jar = aiohttp.CookieJar() # basically http.cookiejar.CookieJar I think
storage = context.storage_state()
for cookie in storage['cookies']:
jar.update_cookies(cookie)
for item in storage['cookies']:
cookie = BaseCookie().load(str(item)) # not even sure why I tried this
jar.update_cookies(cookie)
for item in storage['cookies']:
cookie = BaseCookie().load(item)
jar.update_cookies(cookie)
for item in storage['cookies']:
cookie = SimpleCookie().load(item)
jar.update_cookies(cookie)
我还尝试从 cookie 字典中删除所有“保留”键,即使这是 cookie 数据的大部分。无论如何,它都不会让我将实际的 cookie 加载到 cookie 罐中。我通读了 HTTP cookie.py 源代码和文档,据我所知,其中没有任何内容可以解释我正在做的事情有什么问题。
任何人都能够在不通过会话的情况下将 cookie 加载到 cookie jar 对象中吗?