前言:
在做UI自动化测试时,避免不了的就是一切自动化的入口-登录。如果在开发阶段,那么重复的输入账号密码登录显然是不现实的(可能会导致账号被关小黑屋~~),所以就可以利用首次登录后产生的cookie,来保持浏览器登录状态。
注意:此处使用谷歌浏览器+极客工具(一款好玩的工具)作为例子,要是你使用其他网站学习的话,只需要变化url即可,原理都是大差不差的,这里介绍2种方式保持登录状态,接下来看如何操作吧~
方式一:手动截取cookie
步骤:
1、打开浏览器访问https://www.lmcjl.com,按下F12并点击Application,找到Cookies下该网站的cookie,点击clear清空原始cookie。
2、手动登录网站,如图中所示cookie就是我们想要的:
3、编写脚本-手动将cookie加入浏览器
from selenium import webdriver
from selenium.webdriver.chrome import service
from time import sleep
def goto_url(url):
# 驱动所在本地路径
s = service.Service(r'D:\driver2\chromedriver-win64-119\chromedriver.exe')
# 实例化谷歌浏览器
wb = webdriver.Chrome(service=s)
wb.maximize_window()
# 访问网址
wb.get(url=url)
sleep(0.5)
# 清空原始cookie
wb.delete_all_cookies()
# 装配cookie
wb.add_cookie({'name': 'PHPSESSID', 'value': 'aiedlb0uaaao6f7uhs6ldci3cm'})
sleep(3)
# 刷新页面并等待看登录效果
wb.refresh()
sleep(10)
if __name__ == '__main__':
goto_url('https://www.lmcjl.com')
注意:下图为驱动所在路径
结语:此种方式只适合cookie较少的情况,当登录后生成的cookie比较多时且要准确找到某些能够保持登录状态的cookie是很困难的,所以有了第二种方法。
方式二:自动存储cookie并调用
步骤:
1、需要进行1次登录成功的操作,同时将保存有登录信息的cookie存入文件:
def save_cookie(url):
# 驱动所在本地路径
s = service.Service(r'D:\driver2\chromedriver-win64-119\chromedriver.exe')
# 实例化谷歌浏览器
wb = webdriver.Chrome(service=s)
wb.maximize_window()
# 访问网址
wb.get(url=url)
# 预留手动登录的时间
sleep(30)
# 存登录后的cookie
with open('cookies.txt', 'w') as f:
# 注意要转为json格式存储
f.write(json.dumps(wb.get_cookies()))
print('写入cookie成功')
2、第一步操作之后,在后面cookie有效期限内都可以通过读取cookie.txt文件来保持登录状态,当cookie过期后再执行第一步即可~
def goto_url(url):
# 驱动所在本地路径
s = service.Service(r'D:\driver2\chromedriver-win64-119\chromedriver.exe')
# 实例化谷歌浏览器
wb = webdriver.Chrome(service=s)
wb.maximize_window()
# 访问网址
wb.get(url=url)
# 读取cookie文件
with open('cookies.txt', 'r') as f:
# 注意读取的数据要转化为json格式,若是使用f.read()则读取出的数据类型为str
cookie = json.load(f)[0]
print('读取cookie成功')
# 清空原始cookie
sleep(2)
wb.delete_all_cookies()
# 为浏览器装载cookie
wb.add_cookie({'name': cookie['name'], 'value': cookie['value']})
sleep(2)
# 刷新查看是否登录成功
wb.refresh()
sleep(10)
整个代码:
from selenium import webdriver
from selenium.webdriver.chrome import service
from time import sleep
import json
def save_cookie(url):
# 驱动所在本地路径
s = service.Service(r'D:\driver2\chromedriver-win64-119\chromedriver.exe')
# 实例化谷歌浏览器
wb = webdriver.Chrome(service=s)
wb.maximize_window()
# 访问网址
wb.get(url=url)
# 预留手动登录的时间
sleep(30)
# 存登录后的cookie
with open('cookies.txt', 'w') as f:
# 注意要转为json格式存储
f.write(json.dumps(wb.get_cookies()))
print('写入cookie成功')
def goto_url(url):
# 驱动所在本地路径
s = service.Service(r'D:\driver2\chromedriver-win64-119\chromedriver.exe')
# 实例化谷歌浏览器
wb = webdriver.Chrome(service=s)
wb.maximize_window()
# 访问网址
wb.get(url=url)
# 读取cookie文件
with open('cookies.txt', 'r') as f:
# 注意读取的数据要转化为json格式,若是使用f.read()则读取出的数据类型为str
cookie = json.load(f)[0]
print('读取cookie成功')
# 清空原始cookie
sleep(2)
wb.delete_all_cookies()
# 为浏览器装载cookie
wb.add_cookie({'name': cookie['name'], 'value': cookie['value']})
sleep(2)
# 刷新查看是否登录成功
wb.refresh()
sleep(10)
if __name__ == '__main__':
goto_url('https://www.lmcjl.com')
结语:简单记录学习过程,祝各位道友学习愉快~