Selenium UI自动化验证码:识别+输入

思路:使用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)

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

原文地址:https://www.cnblogs.com/wangx123sec/p/11495103.html

时间: 2024-08-06 04:31:08

Selenium UI自动化验证码:识别+输入的相关文章

【selenium自动化——验证码问题】

处理验证码的几种方法: 去掉验证码这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,如果是在测试环境,这样做可省去了测试人员不少麻烦,如果自动化脚本是要在正式环境跑,这样就给系统带来了一定的风险. 设置万能码去掉验证码的主要是安全问题,为了应对在线系统的安全性威胁,可以在修改程序时不取消验证码,而是程序中留一个"后门"---设置一个"万能验证码",只要用户输入这个"万能验证码",程序就认为验证通过,否则按照原先的验证方式进行验

Python Selenium 搭建Web UI自动化

Python搭建UI自动化环境 下载Python3 Python官网 PyCharm 环境配置 安装Python 勾选Add Python to PATH,一直下一步. 验证:CMD输入Python 下载Chrome Driver 点击下载chromedriver 将驱动放入Python根目录下 安装PyCharm 转载:安装教程 安装Selenium 打开PyCharm 新建Python File 点击面板底部 Terminal 输入pip install selenium 安装.pip li

IDEA+java通过SSH来进行分析日志,实现UI自动化动态验证码登录

在我写自动化脚本的时候经验药真实发送验证码才能往下进行UI自动化 思路:验证码会显示在哪些地方,手机短信?数据库存储?日志? 完整代码如下: package guanyu.tools; import com.jcraft.jsch.*;//import jdk.nashorn.tools.Shell;import java.awt.*;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.A

UI自动化和selenium相关以及八大定位

一.UI自动化相关 1. UI自动化的本质(重点) 定位元素→操作元素→模拟页面操作→断言→测试报告 2. 适合UI自动化的场景 UI自动化的前提条件 (1)需求不能频繁变动 (2)UI稳定(UI自动化就是基于UI层面的,UI界面总变化无法开展) (3)项目周期长(UI自动化脚本编写和调试耗时,项目周期短纯手工更高效) (4)回归测试频繁(回归测试多就会有不断的主流程功能需要回归,自动化更高效) 适用场景 (1)冒烟测试 (2)主功能回归测试 3. UI自动化的原则 (1)一个case完成一个功

Selenium Web 自动化 - Selenium常用API

Selenium Web 自动化 - Selenium常用API 2016-08-01 1 WebElement相关方法2 iFrame的处理3 操作下拉选择框4 处理Alert5 处理浏览器弹出的新窗口6 执行JS脚本7 等待元素加载8 模拟键盘操作9 设置浏览器窗口大小10 上传文件11 Selenium处理HTML5 1 WebElement相关方法 Method   Summary void clear() If   this element is a text entry elemen

字符型图片验证码识别完整过程及Python实现

1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义. 2   关键词 关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL 3   免责声明 本文研究所用素材来自于某旧Web框架的网站 完全对外公开 的公共图片资源. 本文只做了该网站对外公开的公共图片资源进行了爬取, 并未越权 

UI自动化,你值得拥有

去年春节联欢晚会,为了那张“敬业福”,全家都卯足了劲儿“咻一咻”,连节目都顾不上看了.当时我就想,要是能自动化该多好,不停点击屏幕,屏幕不疼手还疼呢,何况还不好分心,生怕错过了“敬业福”.玩“咻一咻”,是靠不停点击按钮来检查是否得到“敬业福”,而工作中的UI自动化,大抵也和“咻一咻”差不多,都是通过不断地输入,验证系统的输出是否正确.然而做UI自动化,效果并不好,收益低就算了,执行速度还慢.比如打开一个浏览器,可能就要等3-5秒,如果等浏览器访问网址,返回网页内容,就需要更长的时间.要是遇到问题

网易 UI 自动化工具 Airtest 浅用记录

一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使用目的是做安卓原生App的元素UI自动化. 二 资源索引 官方资源 网易游戏新开源的 UI 自动化测试项目 [Airtest Project] Airtest官网 Airtest官网上手教程 AirtestProject Github主页 AirtestIDE官方中文文档 Airtest 官方中文文

selenium+python自动化99-清空输入框clear()失效问题解决

前言 在使用selenium做UI自动化的时候,发现有些弹出窗上的输入框,输入文本后,使用clear()方法无效. 这样会导致再次输入时,字符串不是清空后输入,而是跟着后面输入一长串,导致结果不准. 经过几次尝试,先click()点击该输入框,再输入,发现还是无效,最终有以下2种方法可以解决 使用双击输入框后,全选文本再输入就可以了 使用js清空输入框文本 问题描述 在有些弹出的页面上,输入框输入文本,是可以正常输入的,比如我第一次输入测试数据:yoyo 第二次,我想换个测试数据,先clear,