拖拉缺口验证码|汉字定位点击验证码,如何进行识别并精准点击?
在上一篇关于《【RPA应用】中国银行企业网银登录RPA自动实施|实现成功登录后进行账单与票证下载》文章里面讲到登录密码的输入,在这个里面还涉及另外两个知识要点;一、拖拉缺口验证码特点:1、缺口形状不统一;2、缺口位置不统一;3、缺口数量不统一;思路:获取验证缺口区域图片中缺口的坐标位置,然后拖拉滑动···...
扫码分享二维码
在上一篇关于《【RPA应用】中国银行企业网银登录RPA自动实施|实现成功登录后进行账单与票证下载》文章里面讲到登录密码的输入,在这个里面还涉及另外两个知识要点;一、拖拉缺口验证码特点:1、缺口形状不统一;2、缺口位置不统一;3、缺口数量不统一;思路:获取验证缺口区域图片中缺口的坐标位置,然后拖拉滑动···...
扫码分享二维码
在上一篇关于《【RPA应用】中国银行企业网银登录RPA自动实施|实现成功登录后进行账单与票证下载》文章里面讲到登录密码的输入,在这个里面还涉及另外两个知识要点;
一、拖拉缺口验证码

特点:
1、缺口形状不统一;
2、缺口位置不统一;
3、缺口数量不统一;
思路:
获取验证缺口区域图片中缺口的坐标位置,然后拖拉滑动条进行验证;
实施:
第1步、鼠标点击【按下】验证码拖拉条;
第2步、通过以下代码来实现指定区域截图,并保存至本地;
import pyautogui
import random
import string
import os
# 获取屏幕分辨率
screen_width, screen_height = pyautogui.size()
print(f"Screen resolution: {screen_width}x{screen_height}")
# 截图区域的坐标和尺寸
left = 1220 #横向起点坐标
top = 300 #纵向起点坐标
width = 310 #需要截屏宽度
height = 180 #需要截屏高度
# 检查截图区域是否超出屏幕范围
if (left + width) > screen_width or (top + height) > screen_height:
print("Warning: The screenshot region exceeds the screen boundaries.")
# 适当调整区域,确保不超出屏幕
if (left + width) > screen_width:
width = screen_width - left
if (top + height) > screen_height:
height = screen_height - top
# 截取屏幕指定区域
screenshot = pyautogui.screenshot(region=(left, top, width, height))
# 生成随机文件名
random_filename = ''.join(random.choices(string.ascii_letters + string.digits, k=10)) + '.png'
# 设置保存路径
save_path = os.path.join(r'C:\Users\Administrator\Desktop', random_filename)
# 保存截图
screenshot.save(save_path)
# 将图片路径保存到变量
glv['screenshot_save_file_name'] = save_path
# 输出图片路径
print(f"Screenshot saved to: {glv['screenshot_save_file_name']}")第3步、通过此图片借用云码API来实现精准缺口定位识别,代码如下:
import base64
import requests,json
url = "https://api.jfbym.com/api/YmServer/customApi"
with open(glv['screenshot_save_file_name'],'rb') as f:
im = base64.b64encode(f.read()).decode()
data = {
"token":"tqLsCZLYOILCtNGoF_JAxgF7XqQ7zmooyXzAsJuFUTM", #输入自己的token
"type":"20228",
"image":im,#待识别图的base64
}
_headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=_headers, json=data)
glv['fanshui_data']=response.json()
print(response.json())识别返回之后的内容格式为:
{'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'data': '109', 'time': 0.21767926216125488, 'unique_code': 'c2d52ab6bbb885f9680ddaacbe82b0fb'}}对于其中的【109】即为当前缺口图片中目标缺口的像素坐标,亦可理解为横向X坐标;
当有了这个X坐标后就可以实现滑动拖拉至目标位置了;
第3步、移动鼠标至目标位置后,再【弹起】鼠标;
获取当前鼠标的位置,然后将X坐标增加【109】即为移动后的坐标位置即可;
如果验证失败,就将这个过程重复再执行一遍;
如果还没有云码账号,可以直接【点击注册云码】
二、汉字定位点击验证码

如果出现登录二次验证码而出现这个按依次点击目标汉字的验证码系列提示后,操作方法和上述类似,
第1步、第2步都是一样的,第3步对应的代码如下:
import base64
import requests,json
url = "https://api.jfbym.com/api/YmServer/customApi"
with open(glv['screenshot_save_file_name'],'rb') as f:
im = base64.b64encode(f.read()).decode()
data = {
"token":"tqLsCZLYOILCtNGoF_JAxgF7XqQ7zmooyXzAsJuFUTM", #输入自己的token
"type":"30009",
"image":im,#待识别图的base64
}
_headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=_headers, json=data)
glv['fanshui_data']=response.json()
print(response.json())与上述里面的拖拉验证区别在于type对应的接口代码不一样;此处为30009;
识别返回之后的内容格式为:
{'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'data': '41,49|210,97|179,33', 'time': 3.1864874362945557, 'externel': 1, 'unique_code': 'c9e507dbbfe949daa79a083e1df0628b'}}对于其中的【41,49|210,97|179,33】即为当前汉字按照目标需求顺序对应的每个汉字像素坐标,亦可理解为横向X坐标和Y坐标;
当有了这个X坐标和Y坐标后就可以实现滑动拖拉至目标位置了;
第3步、移动鼠标至目标位置后,再【弹起】鼠标;
获取当前鼠标的位置,然后将X坐标和Y坐标分别增加对应的值后即为移动后的坐标位置即可;
如果验证失败,就将这个过程重复再执行一遍;
Copyright Notice
当前文章由【付涛】本人原创开发与文案内容写作,内容版权归当前平台所有,如需转载,请务必注明来源及链接,谢谢合作!
本文最后更新发布于【2024-08-20】,某些文章具有时效性,若有错误或已失效,请联系客服
争议处理:针对本站内容若有异义,亦可直接与【法律顾问:易兴俊,律师联系电话:13825799821】直接联系沟通