背景:
在做UI自动化时,许多页面的操作都是基于登录后才能执行的,那就需要前置先登录。
处理方法:
方法一:复用浏览器,第一次执行登录后,后续所有的操作都在上面执行。
方法二:可以保存登录后的cookie,在其他页面或浏览器执行时手动写入登录态,不用每次都依赖登录,适用于分布式并发执行和有限制登录次数的场景。实现代码参考如下:
注意:driver.get_cookies()获取到的cookie可能会与自己在浏览器看到的cookie数量不同,可能导致的原因是页面还没加载完就读取cookie,可以等页面全部加载完后再get_cookies。
cookie_path = "cookie.json"
#写入登录后的cookie到文件
def write_cookie(cookies):
with open(cookie_path,"w", encoding='utf-8') as f:
json.dump(cookies,f)
#读取cookie
def read_cookie():
with open(cookie_path,"r", encoding='utf-8') as f:
cookies = json.loads(f.read())
return cookies
#设置浏览器cookie
def set_driver_cookie(driver):
cookies = read_cookie()
driver.delete_all_cookies() #清空所有cookie
for cookie in cookies:
# 这里可以增加对有过期时间的cookie处理 expiry
driver.add_cookie(cookie)
#登录成功后写入文件
driver = webdriver.Chrome()
driver.get(url)
#登录成功步骤略
cookies = driver.get_cookies()
write_cookie(cookies)
# 进入页面前先设置cookie,保持登录态
set_driver_cookie(self.driver)
self.driver.get("https://mubu.com/app")