一、验证码由来:
- 验证码,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答
- 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂-点就是滑动验证的。 诸如此类的验证码,对我们的系统增加了安全性的保障,但是对于我们测试人员来讲,在自动化测试的过程中,无疑是一个棘手的问题。
- ------------------------------------------------------------------
- 以上摘抄,自己理解吧。
- 二、webUI图片验证码问题解决办法:
- 1)让开发去掉验证码;
- 2)让开发设置一个万能验证码;
- 3)通过cookie绕过验证码登录;
- 4)pillow库识别图片获取图片内容,填写验证码登录;
- 5)利用缓存登录,比如谷歌你访问过得网站,本地有缓存,利用缓存登录;
- 三、本篇主要介绍通过cookie绕过验证码登录,因为相比4、5方法,简单、好调!
- 1.原理,每次登录都会有cookie信息,我们在要访问的链接里带上cookie信息就可以不用输入账号密码登录成功!
- 2.注意点:访问网站,一旦加载网站,即使没登录也会产生一个cookie,我们需要删除这个cookie信息,否则,你需要登录的网址上传一个cookie,再把第一访问自动生成的也带上,就会有两个cookie,就会登录失败!
- 3.相关代码:
- 方法一:
-
#encoding=utf-8 import time from selenium import webdriver driver1 = webdriver.Chrome(executable_path=r'../conf/chromedriver.exe') driver1.maximize_window() driver1.get('http://XXXXXXXXXX/login') #一旦加载网站,即使没登录,也会产生一个cookie,需要删除cookie driver1.delete_all_cookies() cookie = {"SESSION":"这里填写session值;", "其他cookie键值对":"其他cookie键值对;", "其他cookie键值对":"其他cookie键值对;", "其他cookie键值对":"其他cookie键值对", "其他cookie键值对":"其他cookie键值对", "JSESSIONID":"这里填写jsessionid的值" } driver1.add_cookie({"domain": "域名", "name": "SESSION", "value": "session值", "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False, "Secure": False}) driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对", "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False, "Secure": False}) driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对", "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False, "Secure": False}) driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对", "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False, "Secure": False}) driver1.add_cookie({"domain": "域名", "name": "JSESSIONID", "value": "这里填写jsessionid的值", "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False, "Secure": False}) driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对", "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False, "Secure": False}) time.sleep(2) #列表里面有两个字典cookie信息,一个是登录之前的,一个是登录之后的 save_cookie = driver1.get_cookies() print(save_cookie) driver1.quit() driver2 = webdriver.Chrome(executable_path=r'../conf/chromedriver.exe') driver2.maximize_window() # 必须首先加载网站,这样selenium才知道cookie是属于哪个网站的 driver2.get('http://XXXXXXXXXX/login') print(driver2.get_cookies()) #一旦加载网站,即使没登录,也会产生一个cookie,需要删除cookie driver2.delete_all_cookies() for cookie in save_cookie: # 添加driver1登录成功之后的cookie driver2.add_cookie(cookie) driver2.get('http://XXXXXXXXXX/index') print(driver2.get_cookies()) time.sleep(3)
方法二:
-
#encoding=utf-8 import time from selenium import webdriver def autoSessionLoginSuccess(): driver = webdriver.Chrome( executable_path=r'XXXXXXXXXX\conf\chromedriver.exe') driver.maximize_window() driver.get('XXXXXXXXXX/login') driver.delete_all_cookies() cookie = { "SESSION": "XXXXXXXXXX;", "XXXXXXXXXX": "login;", "XXXXXXXXXX": "login;", "XXXXXXXXXX": "login", "XXXXXXXXXX": "login", "JSESSIONID": "XXXXXXXXXX" } driver.add_cookie({"domain": "XXXXXXXXXX", "name": "SESSION", "value": "XXXXXXXXXX", "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False, "Secure": False}) driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login", "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False, "Secure": False}) driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login", "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False, "Secure": False}) driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login", "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False, "Secure": False}) driver.add_cookie({"domain": "XXXXXXXXXX", "name": "JSESSIONID", "value": "XXXXXXXXXX", "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False, "Secure": False}) driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login", "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False, "Secure": False}) time.sleep(2) driver.refresh() driver.get('XXXXXXXXXX/index') return driver if __name__ == '__main__': #driver1 = webdriver.Chrome(executable_path="../conf/chromedriver.exe") autoSessionLoginSuccess()
-
4.注意:需要访问两次地址,第一访问登录地址,然后手动加载上cookie信息,第二次访问地址再带上登录的cookie,就可以登录成功!
-
第一次访问、第二次访问都需要删除网站自带的cookie,不然是登录不成功的,我一开始只删除了第二次访问地址的cookie信息,怎么也登录不成功,费了好长时间,最后发现多一个session信息,然后发现是因为第一次登录没有删除网站自带的session,这样第二次访问时就有两个session了,就会登录失败!
-
5.查看cookie信息,F12就可以了!
-
四、其他方法,研究好了再补充进来!