自动化测试——处理有验证码的登录

前提:系统登陆页面存在随机验证码,怎么处理

一、让开发人员帮忙隐藏验证码或设置万能验证码,然后正常定位元素即可

二、python截取图片,通过tesseract_ocr识别验证码,存在问题:需要下载一些插件,否则仅能识别数字或字母,复杂一些或图片比较模糊无法识别

三、cookies绕过登陆,先手工登陆系统F12获取对应cookies值。

四、先启动浏览器,然后让程序控制浏览器(即先登录系统后,再启动程序 在 登录后的系统里操作)

       方法三在实际操作中存在问题,用百度登陆功能是正常的,到实际项目系统中没有实现,通过获取程序启动浏览器及系统的cookies值和手工获取的相对比,发现不一致,即程序启动的是一个没有缓存的新的浏览器,是不会用手动输入的cookies的;

4.1、先在Chrome安装文件夹下打开命令提示框(Chrome安装路径下cmd);输入命令语句

chrome.exe --remote-debugging-port=9000 --user-data-dir="D:Chrome"     

chrome --remote-debugging-port=9000(端口号自己设置一个当前未被占用的)此时会重新打开一个浏览器,桌面也会显示一个浏览器标志;

4.2、修改程序并运行,之后的操作会在之前打开的页面中进行(有点像远程控制)

#Chrome设置
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9000") #设置的端口号
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("http://www.baidu.com")

4.3、可能出现的问题,浏览器自动更新关闭后新打开的浏览器又更新到最新版本导致webdriver版本不匹配,需重新下载;仍不能使用,可以将当前打开的浏览器都关闭再重启可正常使用。

PS:如果不想每次都输入命令启动,可以将语句写到批处理文件中(文件中默认载入用户名和密码,会出现重复打开浏览器操作,即第一次仅打开登陆页面,第二次打开一个新的浏览器并输入了用户名和密码),用txt文件编辑,第一行要空一行,之后修改为.bat文件

五、设置浏览器profile,即和方法4相反,让程序在已启动的浏览器中操作,从而保证cookies有效(chrome 浏览器尝试没有成功)

  • Chrome
profile = webdriver.ChromeOptions()
profile.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"])
driver = webdriver.Chrome(chrome_options=profile)
  • Firefox
driver = webdriver.Firefox(firefox_profile=profile)

其他:如果在登录页面输入用户名和密码后设置断点或者较长等待时间,手动输入验证码,然后继续执行程序,感觉也是一种可以执行的方法

六、看接口测试相关资料时,发现方法3的另一种方式,原来不成功的原因是浏览器没有加载缓存(这个是默认设置的),所以需要在启动浏览器设置时添加  加载浏览器缓存(程序执行时当前已打开的Chrome都需要是关闭状态

# 浏览器中缓存的位置,XXX换成自己的对应路径
path = r'C:\Users\XXX\AppData\Local\Google\Chrome\User Data'

# Chromedriver环境变量中设置了可以不用写
driver_path = r'D:\Anaconda\selenium\webdriver\Chromedriver\chromedriver.exe'

options = webdriver.ChromeOptions()

options.add_argument('--user-data-dir=' + path)

# Chromedriver设置了环境变量,executable_path可以省略,这个有默认参数
driver = webdriver.Chrome(executable_path=driver_path, chrome_options=options)

driver.get("https://mp.csdn.net/")

 缓存位置查看方法

​​​​​​​

 遇到问题:①有的资料写的是加\Default,这样可以打开浏览器,但是仍会重定向到登陆页面,查看浏览器历史记录发现是打开了一个新的没有缓存的浏览器

②、程序执行能正常打开浏览器,但是没有输入对应的URL;控制台报错基本就是Chromedriver和Chrome的版本不一致了,需要重新下载对应的驱动就可以(这里最好把Chrome的自动更新关闭)

③、以上两个都符合的前提下仍出现②的情况,可以尝试kill杀死Chrome进程的方法来关闭浏览器,方法见下方参考链接

最后:还是推荐找开发开后门,找个万能验证码(仅限内部测试环境),省时省力还可以持续集成

参考链接:      https://www.zhihu.com/question/285539191/answer/499144118  ( profile设置)

                        用python,selenium抓取博客积分_kiramario的博客-CSDN博客      (方法四详情)

                        ​​​​​​​https://blog.csdn.net/aaaaaaaaanjjj/article/details/134991742       (方法六详情)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值