zoukankan      html  css  js  c++  java
  • Selenium登录验证码解决方案细解

    #大牛测试,专注测试技术
    #qq:2574674466
    #简简单单自动化测试

      

    在网站中加入验证码的目的是加强用户安全性和提高反爬虫机制,在登录网站时,经常遇到各种各样验证码如:

    1) 英文与数字结合

     2)  汉字

    3) 图形,如12306登录

    等等,因验证码的存在,对自动化测试工具造成极大困扰

    有困难,但还是要解决的........

    以下列出一些处理策略

    1)调用OCR识别:

           优势:开源

           劣势:识别率低

        步骤、tesseract 安装

       #

    #pip install pytesseract

     如:识别以下数字

    #大牛测试,专注测试技术
    #qq:2574674466
    #简简单单自动化测试
    from PIL import Image
    from pytesseract import pytesseract
    #使用PIL打开图片
    im = Image.open("t.PNG")
    code = pytesseract.image_to_string(im)
    print(code)

     识别英文字母与数字

     

    经测试以上验证码,失败:

      综以上可见:准确率不是太高

    2)调用API使用第三方平台识别验证码

        本篇以斐斐打码平台作一介绍

        ①  登录“斐斐”官网 注册

      http://www.fateadm.com/

      ②打开用户中心 进行充值,充值后会获得相应积分,每次失败会扣除积分

    充值中心,学习用,仅需充值1分钱便好。

      ③ 记住PD账号与PD秘钥

      ④计费标准模组,根据要识别的内容选择类型

     如 4为英数混合 选择  30400

     

    ⑤http://docs.fateadm.com/web/#/1?page_id=17  下载python api

    ⑥找到TestFunc()方法,作以下修改

    #大牛测试,专注测试技术
    #qq:2574674466
    #简简单单自动化测试
    def TestFunc():
        pd_id           = ""     #用户中心页可以查询到pd信息
        pd_key          = ""
        app_id          = "100001"     #开发者分成用的账号,在开发者中心可以查询到
        app_key         = "123456"
        #识别类型,
        #具体类型可以查看官方网站的价格页选择具体的类型,不清楚类型的,可以咨询客服
        pred_type       = "30400"
        api             = FateadmApi(app_id, app_key, pd_id, pd_key)
        # 查询余额
       #balance         = api.QueryBalcExtend()   # 直接返余额
        #api.PredictExtend()
        # api.QueryBalc()
    
        # 通过文件形式识别:
        file_name       = “t.png"
        result =  api.PredictFromFileExtend(pred_type,file_name)   # 直接返回识别结果
        #print(result)
        return  result

    如识别如下验证码:

     运行结果为:

    欢迎加入交流群:Selenium学习群: 628908894
  • 相关阅读:
    【刷题】AtCoder Regular Contest 002
    【刷题】AtCoder Regular Contest 001
    【刷题】LOJ 2863 「IOI2018」组合动作
    (栈)栈 给定push序列,判断给定序列是否是pop序列
    网易面试题:和为n连续正数序列
    Google面试题:计算从1到n的正数中1出现的次数
    递归法
    打印给定字符串中字符的所有排列
    C++ 实现不能被继承的类
    atoi 实现
  • 原文地址:https://www.cnblogs.com/tim2016/p/14684402.html
Copyright © 2011-2022 走看看