前言
-
• 在一些实际开发场景中,我们在使用
Selenium
做自动化测试时需要保留用户的会话信息,从而避免重复登录,今天这篇文章就带大家实战如何使用Selenium
保存会话信息。
版本
-
• Python 3.x
整体思路
-
• 当我们打开页面时,检测会话信息文件是否存在,如果存在直接加载会话信息,如果不存在,则进行登录并保存会话信息到本地文件中。
实践
-
• 当我们第一次打开页面时,登录并保存会话信息。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pickle# 第一次登录
driver = webdriver.Chrome()driver.get("https://example.com/login")# 使用自动填充或其它方式登录
username_input = driver.find_element_by_name("username")
password_input = driver.find_element_by_name("password")
username_input.send_keys("your_username")
password_input.send_keys("your_password")
password_input.send_keys(Keys.RETURN)# 登录成功后将driver.get_cookies()返回的cookies保存到名为"cookies.pkl"的文件中
pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))# 关闭 driver
driver.close()# 第二次访问
driver = webdriver.Chrome()# 这里需要提前访问一下再加载 cookies 否则会出现 InvalidCookieDomainException: Message: invalid cookie domain
driver.get("https://example.com/login")# 加载 "cookies.pkl" 中的会话信息
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:driver.add_cookie(cookie)# 携带会话信息访问
driver.get("https://example.com/xxx")
问题
invalid cookie domain
-
• 谷歌默认加载使用的是
data domain
,所以需要先访问目标页面切换到对应的domain
:
driver.get("https://example.com/login")# 加载 "cookies.pkl" 中的会话信息
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:driver.add_cookie(cookie)
-
• 除此之外,如果你访问的目标页面为一级域名,而保存的
cookies
中存在二级域名的domain
,那么也会出现invalid cookie domain
的问题,你可以将cookie
的domain
二级域名domain
转换为 一级域名domain
再进行加载,例如:
cookies domain:
.example.com
.example.com
xxx.example.com
xxx.example.com那么需要全部调整为:
.example.com
.example.com
.example.com
.example.com
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。