• (三十一)WebDriver API之验证码的处理


    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,

    这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

    验证码的处理

      对于Web应用来说,大部分的系统在用户登录时都要求用户输入验证码。验证码的类型很多,有字母数字的、有汉字的,甚至还有需要用户输入一到算术题的答案的。对于系统来说,使用验证码可以有效地防止采用机器人猜测方法对口令的刺探,在一定程度上增加了安全性。

      但对于测试人员来说,不管是进行性能测试还是自动化测试,都是一个比较棘手的问题。在WebDriver中并没有提供相应的方法来处理验证码,这里笔者根据自己的经验来谈谈处理验证码的几种常见方法。

      1.去掉验证码

      这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可。如果是在测试环境,这样做可省去测试人员不少的麻烦;但如果自动化脚本是在正式环境测试,那么这种做法就给系统带来了一定的风险。

      2.设置万能验证码

      去掉验证码的主要问题是安全,为了应对在线系统的安全威胁,可以在修改程序时不去掉验证码,而是在程序中留一个“后门”,即设置一个“万能验证码”。只要用户输入这个“万能验证码”,程序就认为验证通过,否则就判断用户输入的验证码是否正确。

      设计万能验证码的方式非常简单,只需对用户的输入信息多加一个逻辑判断,下面通过例子演示。

     

    from random import randint
    
    #生成一个1000到9999之间的随机整数
    verify = randint(1000,9999)
    print(u"生成的随机数:%s" % verify)
    
    number = input("请输入随机数:")
    print(number)
    number = int(number)
    
    if number == verify:
        print("登录成功!!")
    elif number == 5412:
        print("登录成功!!")
    else:
        print("验证码输入有误!")

      randint()用于生成随机数,设置随机数的范围为1000~9999之间。运行程序分别输入正确的验证码、万能验证码和错误的验证码,执行结果如下:

     

     

      3.验证码识别技术

      例如,可以通过Python-tesseract来识别图片验证码。Python-tesseract是光学字符识别Tesseract OCR引擎的Python封装类,能够读取任何常规的图片文件(JPGGIFPNGTIFF等)。不过,目前市面上的验证码形式繁多,大多验证码识别技术,识别率都很难达到100%

      4.记录cookie

      通过向浏览器中条件cookie可以绕过登录的验证码,这是比较有意思的一种解决方案。例如我们在第一次登录某网站时勾选“记住密码”的选项,当下次再访问该网站时自动处于登录状态了。这样自然绕过了验证码问题。这个“记住密码”的功能其实就记录在了浏览器的cookie中。前面已经学了通过WebDriver来操作浏览器的cookie,可以通过add_cookie()方法将用户名密码写入浏览器cookie,当再次访问网站时,服务器将直接读取浏览器的cookie进行登录

    from selenium import webdriver
    from time import sleep

    # driver=webdriver.Firefox()
    driver=webdriver.Chrome()
    driver.get("https://baidu.com/")

    #手动添加cookie

    driver.add_cookie({'name':'BAIDUID','value':'92241303A3AC5BA1D9FD08FAA258A9BD:FG=1'})
    driver.add_cookie({'name':'BDUSS','value':'ktFaVU3QXBSSUxLNjFxLWg0Qlg1NkJuWGtqU1h6alA2cnF5bzg0eEFxZFpTQ0piQVFBQUFBJCQAAAAAAAAAAAEAAAB~V4cC5~Pd0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFm7-lpZu~paM'})

    sleep(3)
    driver.refresh()
    sleep(3)

      这种方式最大的问题是如何从浏览器的cookie中找到用户名和密码对应的key值,并穿输入对应的登录信息。可以用get_cookies()方法来获取登录的所有的cookie信息,从中找到用户名和密码的key。当然,更直接的方式是询问开发人员。

  • 相关阅读:
    CSS3 -- 透明色(rgba)
    CSS3 -- 多背景(backgrounds)
    CSS3 -- 背景原点(background-origin)
    CSS3 -- 背景裁剪(background-clip)
    CSS3 -- 背景尺寸(background-size)
    CSS3 -- 图片边框(border-image)
    CSS3 -- 边框颜色(border-color)
    CSS3 -- 盒模型(box-sizing)
    CSS -- 字体单位(px、em、rem)
    课程总结
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11459817.html
Copyright © 2020-2023  润新知