title: webUI自动化-selenium绕过登录的方法
date: 2023-03-05 17:32:27.012
updated: 2023-03-05 18:15:15.557
url: /archives/webui自动化-selenium绕过登录的方法
categories:
- selenium
tags: - selenium
前言
在web自动化中令人最头大的或许除了页面元素定位外,当属绕过项目的登录验证了;
那么有哪些方法可以绕过登录验证呢?最简单的方式就是让开发去掉登录验证【当然这不现实】;那还有其他方式处理登录吗,我的答案是有,悟空你看~~~~
1. 通过启动浏览器绕过登录验证
在创建webdriver实例化时,一般我们都是默认让它去启动我们给予它的浏览器驱动去打开一个全新的浏览器,没有任何缓存数据,全新;但是这里呢,我们可以在实例化中对她进行指定地址如下:
每次启动浏览器做一些操作时我们的cookie数据都会缓存在浏览器的默认路径下,我们可以查看浏览器默认地址【以下都以chrome为例】:
在浏览器中输入:chrome://version
下图中的个人资料路径,就是我们所需要的路径;注意去掉:Default
# 去掉Default,并在路径前加上:--user-data-dir= 就是我们要的路径啦
profile_directory = '--user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data'
接下来我们在代码中配置此路径就就可以啦【启动前一定要杀掉其他浏览器进程否则会报错】代码如下:
from selenium import webdriver
import os,platform
if platform.system() =="Windows":
os.system("taskkill -im chrome* -f") # 把chrome开头的进程都杀掉
else:
os.system("killall -9 chrome*")
profile_directory = r'--user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data'
print(profile_directory)
option = webdriver.ChromeOptions()
option.add_argument(profile_directory)
driver = webdriver.Chrome(chrome_options=option)
driver.get("https://www.baidu.com/")
以这种方式启动浏览器并访问项目首页后可自动跳过登录页面;当然前提是在我们电脑上已经登陆过有cookie存在
弊端:
- 运行机器上必须登录过网站有cookie信息存在,如果过期就得重新登录
2. 通过cookie方式跳过登录验证
添加Cookie时需要逐条添加,cookie_dict示例:
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’})
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’})
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})"
如何添加cookie实现绕过登录
以百度为例我们先登录百度为例,通过F12查看响应头的cookie值如下图
# 从图中可以找出:name= "BDUSS",value = "3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJE"
# 构造cookie字典
cookie = {'name' : 'BIDUPSID', 'value' : '3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUE**'}
# 然后调用:driver.add_cookie(cookie_dict=cookie)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
cookie = {"name":"BDUSS", "value":"3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUE**"}
# 注意:如果运行报错可尝试在添加cookie前先打开一个页面在进行后续操作
# driver.get("https://www.baidu.com/")
driver.add_cookie(cookie_dict=cookie)
driver.get("https://www.baidu.com/")
time.sleep(10)
driver.quit()
以这种方式访问被测网站依旧也是以cookie为伴进行登录绕过
弊端:
- 保持账号登录不能退出,退出则脚本报错
- cookie过期后依旧会运行失败,需要更新cookie
3. 通过无权限验证的登录接口登录获取cookie信息绕过登录
同上类似也是围绕cookie进行绕过登录,废话不多说上代码:
import requests
from selenium import webdriver
from time import sleep
def get_cookie(username, password):
login_url = 'http://第三方无校验接口'
data = dict(username=username,password=password)
res = requests.post(login_url, data=data, allow_redirects=False)
esscp_id = res.cookies.get('ECSCP_ID')
cookie = dict(name='ECSCP_ID',value=esscp_id)
return cookie
admin_url = 'http://访问被测网站首页地址'
driver = webdriver.Chrome()
driver.get(admin_url)
cookie = get_cookie(username,password)
driver.add_cookie(cookie)
driver.get('http://访问项目地址')
sleep(10)
driver.quit()
此方式相对于上方两种通过cookie绕过登录较好,好在哪里看代码就知道啦
- 无需担心每次访问浏览器时cookie过期
4. 使用OCR识别登录页面验证码
这就比较高级了,你得有图像识别算法程序来获取页面验证码,进行ocr图像识别获取验证码进行验证
当然自己写的程序识别正确率一言难尽啊;
不过可以去调用百度或者其他厂商的ORC对外接口进行识别【收费哦】
白嫖是我的宗旨,所以我不用,哈哈哈哈
了解下:
常用的OCR库:
pytesseract
PaddleOCR
此方法也仅针对于页面验证为图片数字校验可进行OCR识别
5. 其他方式:
redies获取验证码:这种方式需要和RD进行协商,让他把验证码存放至redies中调用指定接口来访问redies获取
去掉验证:RD协商,去掉登录验证码或新开一个登录2页面没有验证码校验
万能验证码:RD给一个万能验证码可登录系统
可能还有其他更多的方法绕过登录,就靠大家啦~