思路:使用UI+接口的方式来查找验证码图片和获取验证码元素进行参数输入(用截图方式)(非图片类型验证码无法实现)

我们以访问当当网的注册界面来演示

1.通过selenium定位查找验证码并截图保留

1引入selenium包,创建web驱动,进入登录界面,执行无误

2创建截图函数:查找验证码元素,截下当前的图片

定位验证码图片

对验证码图片进行截图

使用代码获取验证码图片左上角的坐标(x,y),使用代码获取验证码图片的长度和宽度,求出两个对角的横纵坐标(四个边的x,y坐标)

3通过已经获得的验证码的两个对角线的点的四个坐标将验证码截图(后面用接口获取值)

获取到的截图

这部分实现的代码

2. 新建获取验证码函数,通过接口方法获取验证码

1这个操作需要花钱,参考网址:https://www.showapi.com/apiGateway/view?apiCode=184

2注册登录并购买套餐(花钱就行,注意使用时的消耗和次数)推荐买最便宜的试,有需要再说

3使用方法:根据当前验证码的规则是4位英文字母,所以我们使用只含英数字符的就行

检查验证码类型和长度(当前验证码是四位,且均是英文字母)

选择业务类型(因此选择英文数字类型的待识别内容)

4选择操作语言,查看指引方法(上一张图往下滚)

选择语言后出现代码的指引操作,点击下载右边的SDK下载(soft-develop-kit 软件开发包)

下载是一个zip压缩包,解压后是一个py同名不同格式名的文件

将这个文件放到工作路径并引用,引用方法参照代码指引,并需要下载接口请求的requests库

调用这个文件里的方法我们需要三个参数(url;my_appid;my_appsecret)其中接口地址在上面已给出

my_appid和my_secret在登录后的个人中心——我的应用处获取 my_secret需要输入密码

查看appid

查看密码(得先输入登录密码)

其他操作内容——对文件的获取,以及内容及长度的识别,这里只展示使用方法,上面有使用参数的介绍,根据个人需要配置参数,最后调用发送请求获取响应

使用方法介绍

参数介绍

5完成验证码函数的代码实现

6使用变量接收获取到的验证码,定位到输入框,输入获取到的验证码

7一切都准备好后,点击运行

最后附上全部代码

from selenium import webdriver
from PIL import Image
from ShowapiRequest import ShowapiRequest

driver = webdriver.Chrome()
driver.get("https://login.dangdang.com/register.php?returnurl=http://book.dangdang.com/?_utm_brand_id=11106&_ddclickunion=460-5-biaoti|ad_type=0|sys_id=1")

def screen_shot():
    driver.save_screenshot(r"D:\zhuce.png") #截下当前页面的图
    left_angle = driver.find_element_by_id("imgVcode").location #获取验证码左上角坐标
    print(left_angle) #查看验证码图片左上角点的坐标
    left = left_angle["x"] #获取验证码图片最左边的x轴坐标
    top = left_angle["y"] #获取验证码图片最上面的y轴坐标
    image = driver.find_element_by_id("imgVcode") #对整个图片进行定位
    width = image.size["width"] #获取图片的宽度
    height = image.size["height"] #获取图片的高度
    right = left+width #获取验证码图片最右边的x轴坐标
    down = top+height #获取验证码图片最下面的y轴坐标
    print(left,top,right,down) #打印四个角的横纵坐标

    openim = Image.open(r"D:\zhuce.png") #打开刚才截下的整个的图片
    jietu = openim.crop((left,top,right,down)) #通过刚才获得的四个坐标进行截图(Imagez中的方法) 这里是两个小括号
    jietu.save(r"D:\xi.png") #截取验证码的小图并继续保存

def yanzhengma():
    yz = ShowapiRequest("http://route.showapi.com/184-4","104117","6baff26b20aa48edb6584955c0e08559")
    yz.addFilePara("image",r"D:\xi.png") #小验证码的照片来源
    yz.addBodyPara("typeId","24") #这个是纯英文数字,我输入24就可以
    yz.addBodyPara("convert_to_jpg","0") #照片类型不做转换
    yz.addBodyPara("needMorePrecise","1") #精度转换
    res = yz.post().json() #获取json格式的响应,方便取值
    d = res["showapi_res_body"]["Result"] #获取Result下的验证码的值
    print(d) #打印
    return d #返回

if __name__=="__main__":
    screen_shot()
    c = yanzhengma() #赋值 用于输入
    driver.find_element_by_id("txt_vcode").send_keys(c)

补充一下,这个套餐有次数和时间限制,想知道使用情况可以登录并查看即时情况

本篇博文虽然用的是Python,但验证码接口识别支持多种语言。也可以用其他语言实现

转载于:https://www.cnblogs.com/wangx123sec/p/11495103.html

Selenium UI自动化验证码:识别+输入相关推荐

  1. python selenium UI自动化解决验证码的4种方法

    测试环境 windows7+ firefox50+ geckodriver # firefox浏览器驱动 python3 selenium3 selenium UI自动化解决验证码的4种方法:去掉验证 ...

  2. Selenium UI 自动化获取接口数据

    Selenium UI 自动化获取接口数据 1.前端向接口的传参: 2.捕获到接口返回的内容后,判断前端是否有按照接口返回的内容进行展示 针对第一点,我上家公司是做旅游的,旅客预订完人数.房间数后前端 ...

  3. Python+Selenium UI自动化 - 调用JS代码

    当webdriver遇到无法完成的操作时候,这个时候可以使用javascript来完成,webdriver提供了execute_script()接口来调用js代码. 执行js有两种场景: 1.在页面上 ...

  4. selenium UI自动化实战

    创建了一个测试群,大家相互总结资料分享最新得技术,目前群里面云集大量得大厂测开,问题基本都能解决 ,加我好友加入哦 总结得资料分为面经与技术文档总结 面试总结包含:linux.mysql.python ...

  5. Python Selenium UI自动化 ⽂件上传

      UI自动化进行文件上传,其实本质就是将所需上传的文件路径,传递给后端服务即可,至于读取文件的过程,其实开发人员已经在后端服务中完成了.所以我们要做的就是:拿到文件路径 -> 传出去.那么这里 ...

  6. 网络投票轻松实现自动化 - 验证码识别的基本思路及方法

    投票软件比较有技术含量的部分就在验证码识别.为防止投票作弊,很多投票网站都会加随机验证码,输入验证码后才能投票.但是加了验证码是否就能万无一失呢,也不尽然.虽然不是所有验证码都能识别(如QQ的变形汉字 ...

  7. Python Selenium UI自动化:滚动条滑动

    文章目录 问题 滑动至固定位置 Window 对象方法 - scrollTo js&python:滑动至固定位置 滑动至元素 元素对象方法 js&python:滑动至元素 问题 在UI ...

  8. Python+Selenium UI自动化 - cookie处理方法及适用场景

    方法一:手动登录系统后,F12查看页面cookies的值,键值对的形式写入代码中 add_cookie方法,实际编写时,遇到某些参数无效的报错 可以直接把对应的键值对删除,举例仅写了一行数据,实际运行 ...

  9. Python+Selenium UI自动化 - alert/confirm/prompt窗口处理方法

    WebDriver中处理原生JS的alert.confirm以及prompt非常方便,三种弹出窗口均无法直接通过页面元素定位,不关闭窗口无法在页面上做其他操作 语法:         text:返回a ...

最新文章

  1. Charles抓取https请求
  2. php析构函数的用法
  3. 虚拟机下Linux安装图解之一:VMware Workstation的安装
  4. foo、bar到底是什么意思
  5. linux ubuntu文件浏览器如何显示隐藏文件?(快捷键ctrl+h)
  6. 初级java程序员怎样快速提升自己
  7. 如何在CHROME里调试前端代码?
  8. php 替换数字和字母,php preg_替换非字母数字字符并选择连词,然后拆分
  9. 调查 | 用户无法识别网络钓鱼攻击
  10. XML解析成实体类统一工具类
  11. arduino 中断 串口_【Arduino教程】第一讲:Arduino是什么?
  12. Unity WebView 插件 | 浏览器插件3D WebView 专栏介绍
  13. 华南技术盛会:BingoDay2017在天河人才港盛大举行
  14. 数据产品经理真的比数据分析工资高吗?
  15. “校内网”将不存在,“校内网”更名为“人人网”
  16. 只会用ping测试网络通不通?高级网工还会这么用
  17. word写论文时参考文献、目录以及页码设置
  18. 计算机信息安全专业主要学习什么,信息安全专业学什么 课程有哪些
  19. 朋友圈祝自己生日快乐的文案
  20. 游戏开发之路-hxx

热门文章

  1. mul matlab,[转载]Matlab boxplot for Mul
  2. 从服务器信息检索,信息检索方法
  3. IEEE Access 上岸指南
  4. Python3中关于下划线变量和命名的总结
  5. Vue生命周期axios
  6. 养生指南 2 : 中医的最高境界是养生 , 养生的最高境界是养心
  7. 浙江移动面试经验(2011)
  8. 彩涂板废气处理吸附工艺
  9. python画矩阵热图_如何用python的matplotlib绘制热图
  10. 换三张麻将源代码php,理论先行:麻将换三张攻略大全