python 有没有一种方法可以用selenium无限期地保持OAuth2 cookie有效

lhcgjxsq  于 2023-04-19  发布在  Python
关注(0)|答案(2)|浏览(230)

bounty将在13小时后到期。回答此问题可获得+50声望奖励。ec08b914希望引起更多关注此问题。

我正在使用selenium访问一个需要登录的页面。目前我正在做这样的事情:

import json
from selenium.webdriver import Chrome

cookies_path = 'tmp/cookies.json'
cookies = json.load(open(cookies_path))
driver = Chrome()
driver.get('https://www.example.com/')
for cookie in cookies:
    driver.add_cookie(cookie)
driver.get('https://www.example.com/user-data')
# do stuff
json.dump(driver.get_cookies(), open(cookies_path, 'w'))
driver.quit()

脚本计划每小时运行一次。然而,它只能成功运行23次。在第24次执行driver.get('https://www.example.com/user-data')时,驱动程序将重定向到登录页面,我的代码中断。然后我必须重新手动登录,手动保存cookie,但新的cookie在24小时后仍然无效。但在我自己的笔记本电脑上,我可以无限期地保持登录在这个网站上,从来没有被重定向到登录。我试图跳过过期的,当添加cookie到驱动程序,但它没有帮助。
仅供参考,网站使用OAuth2,我猜我的cookie会在服务器上的会话令牌过期时过期。有没有办法像我的浏览器一样使用selenium无限期地保持cookie有效?
编辑:
刚刚看到this person有和我一样的问题,但到目前为止还没有答案。

jgwigjjp

jgwigjjp1#

这是因为selenium的cookie会在24小时后过期,而在您的笔记本电脑上,浏览器可能会将会话令牌存储在安全的会话存储中,该存储与cookie分开,并且会持续存在。您可以通过将会话令牌存储在本地机器上的安全存储中(序列化到文件中),然后在每次运行脚本时检索(反序列化)它来实现与selenium相同的效果。

hts6caw3

hts6caw32#

感谢@Saheed Hussain的回答和this answer,我通过以下方式解决了这个问题

from selenium.webdriver import Chrome, ChromeOptions

options = ChromeOptions()
options.add_argument('--user-data-dir=tmp/user_data')
options.add_argument('--profile-directory=Profile 1')
driver = Chrome(options=options)

相关问题