首页 > 解决方案 > 使 Selenium Chromedriver 控制的浏览器像普通浏览器一样保存基于 yubikey 的身份验证会话

问题描述

我正在使用Python 和 Selenium通过自动化从网页中提取一些数据。该网页通常需要每天进行一次基于 yubikey 的身份验证。

但是,当.get()使用该页面时Chrome Webdriver,它每次都要求进行身份验证,我需要wait()在我的脚本中添加以便在到达目标页面之前先手动进行身份验证。

我认为 webdriver 控制的浏览器不会像普通浏览器那样保存身份验证会话。

是否可以让 webdriver 控制的浏览器正常保存身份验证会话,这样我就不必每次都手动进行身份验证get()

标签: pythonseleniumselenium-webdriverselenium-chromedriverbrowser-automation

解决方案


此示例将在您登录并保存 cookie 后使用 cookie 将您登录到 stackoverflow.com。

from selenium import webdriver
import time
import pickle

driver = webdriver.Firefox(executable_path=r'C:\\Path\\To\\geckodriver.exe')
driver.get('https://stackoverflow.com/')

time.sleep(60)
#########################

#LOGIN TO STACKOVERFLOW

########################
pickle.dump(driver.get_cookies(), open("C:/Path/to/cookie/cookies.pkl","wb"))
driver.close()

time.sleep(5)
driver = webdriver.Firefox(executable_path=r'C:\\Path\\To\\geckodriver.exe')
driver.get("https://stackoverflow.com/")
cookies = pickle.load(open("C:/Path/to/cookie/cookies.pkl", "rb"))
for cookie in cookies:
    driver.add_cookie(cookie)
driver.get("https://stackoverflow.com/")



保存 cookie 后,您可以直接使用 cookie。

from selenium import webdriver
import time
import pickle


driver = webdriver.Firefox(executable_path=r'C:\\Path\\To\\geckodriver.exe')
driver.get("https://stackoverflow.com/")
cookies = pickle.load(open("C:/Path/to/cookie/cookies.pkl", "rb"))
for cookie in cookies:
    driver.add_cookie(cookie)
driver.get("https://stackoverflow.com/")

推荐阅读