第十四:Python自动化-登录有验证码的如何实现登录(图鉴打码平台通过图片识别的方式识别)

1.登录验证码有多种,有纯数字的,纯字母的,有字母和数字的,有计算的等等

1.1.而且每次都是随机出现的,这种情况我们怎么来识别呢?如何解决这个难题?

在这里插入图片描述

一.分析问题

1.让开发在测试环境中,去掉验证码

2.测试环境中,设置一个万能的验证码

3.通过cookie绕过登录

4.通过自动识别技术,来识别验证码
5.对于以上方法,前三种都不太好方便,需要依赖上游
5.1.所以尽可能的自己单枪匹马去解决

二.现在主要来讲第四种方法

1.自动识别技术,其实就是通过第三方网站的力量来实现快速识别
2.有现成的东西,直接借助打码平台的自动识别技术使用就行
3.百度搜索:图鉴打码平台,找到结果,并点击进入

在这里插入图片描述

3.1.点击开发文档,可以看到导航条可以用多种编程语言将其写好
3.1.1.这些都是可以直接拿来使用的,这里以Python语言为例,借助使用一下

3.1.2.但是,需要花钱,也就充值1块钱,就可以用500
3.2.第一步就是要在这个打码平台上进行注册,登录,再充值1元即可
3.2.1.以下重要信息需要用到:你的账号和密码

在这里插入图片描述

3.2.2.比如登录的验证码是纯数字,就传1
3.2.3.登录的验证码是纯英文,就传2
3.2.4.如果登录的验证码是数字字母混合的,那就传3
3.2.5.像我遇到的,是计算题验证码,就传11

在这里插入图片描述

4.重点:在脚本的第三步,尤其要注意一个细节,就是屏幕缩放比

4.1.如果忘记这里,有可能对验证码截图截不到

在这里插入图片描述

from selenium import webdriver
import base64
import json
import requests
from PIL import Image


# 64位编码流
def base64_api(uname, pwd, img, typeid):

    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        b64 = base64_data.decode()
        
    data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
    
    result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
    
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]


# 第一步:打开浏览器,访问登录页面
# 1.1启动浏览器
driver = webdriver.Chrome()
# 1.2 打开后台监控平台的登录页面
driver.get('')

# 第二步:输入账号、密码
# 输入账号
driver.find_element_by_xpath('//input[@placeholder="账号"]').send_keys('')
# 输入密码
driver.find_element_by_xpath('//input[@placeholder="密码"]').send_keys('')

# 第三步:识别验证码图片中的内容
# 3.1截取网站中的验证码图片
# 3.1.1、对当前网页进行截图,并保存为page.png的图片
driver.save_screenshot('page.png')
# 3.1.2  定位页面的图片元素,
pic_ele = driver.find_element_by_xpath('//div//img')
# 3.1.3 获取图片在页面中的坐标位置(此处计数位置要考虑屏幕的缩放比例)
rec = pic_ele.rect
# 验证码左边界位置
left = rec['x'] * 1.50
# 验证码上边界位置
top = rec['y'] * 1.50
# 验证码右边界位置
right = (rec['x'] + rec['width']) * 1.50
# 验证码下边界位置
button = (rec['y'] + rec['height']) * 1.50
location = (left, top, right, button)

# 3.1.4通过验证码的位置进行截图
page = Image.open('page.png')
code_pic = page.crop(location)
# 3.1.5 保存截取下来的验证码为code.png的图片
code_pic.save('code.png')

# 3.2 调用验证码识别的方法去识别
result = base64_api(uname='', pwd='', img='code.png', typeid=11)
print("识别的结果是:", result)

# 第四步:输入识别之后的结果,点击登录
# 4.1 输入计算结果之后的验证码
driver.find_element_by_xpath('//input[@placeholder="验证码"]').send_keys(result)

# 4.2点击登录按钮
driver.find_element_by_xpath('//button[@type="button"]').click()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平头哥-测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值