

反自动化网址
打开链接:https://www.runninghub.ai/?inviteCode=eqzq1jbv
影刀RPA遇到反验证码的网站 键盘鼠标自动化都搞定不了 大家来挑战一下吧 以解决
DCpage:代码分享
主流程
验证码流程
py代码
所需库 OpenCV-Python
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import cv2
import numpy as np
import base64
def decode_base64_to_image(base64_str):
"""
从Base64编码字符串中解码并还原为OpenCV格式的图片,同时将宽高缩小一倍
:param base64_str: 图片的Base64编码字符串(支持带/不带data URI前缀)
:return: OpenCV格式的彩色图片(numpy数组,宽高已缩小一倍)
:raises Exception: 解码失败或图片格式无效时抛出异常
"""
try:
# 移除Base64字符串中的data URI前缀(如data:image/jpeg;base64,),兼容带前缀的输入
if "," in base64_str:
base64_str = base64_str.split(",")[1]
# 对Base64字符串进行解码,得到图片字节数据
image_bytes = base64.b64decode(base64_str)
# 将字节数据转换为numpy数组(uint8类型,对应图片像素格式)
image_data = np.frombuffer(image_bytes, dtype=np.uint8)
# 使用OpenCV解码numpy数组为彩色图片
image = cv2.imdecode(image_data, cv2.IMREAD_COLOR)
# 校验解码是否成功(若图片无效,cv2.imdecode会返回None)
if image is None:
raise Exception("Base64编码无效,无法解码为有效图片")
# 核心修改:获取原图宽高,计算缩小一倍后的尺寸
original_height, original_width = image.shape[:2]
new_width = original_width // 2 # 整数除法,避免小数尺寸
new_height = original_height // 2
# 将图片宽高缩小一倍(INTER_LINEAR 插值方式,兼顾速度和质量)
resized_image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_LINEAR)
return resized_image
except base64.binascii.Error as e:
raise Exception(f"Base64解码失败:{str(e)}")
except Exception as e:
raise Exception(f"图片解析异常:{str(e)}")
def find_gap_position(bg_url, gap_url):
"""
从网络下载背景图和缺口图,并计算缺口位置
参数:
bg_url: 背景图的URL
gap_url: 缺口图的URL
返回:
缺口位置的X坐标
"""
# 下载图片
bg_image = decode_base64_to_image(bg_url)
gap_image = decode_base64_to_image(gap_url)
# 转换为灰度图
bg_gray = cv2.cvtColor(bg_image, cv2.COLOR_BGR2GRAY)
gap_gray = cv2.cvtColor(gap_image, cv2.COLOR_BGR2GRAY)
# 使用边缘检测
bg_edge = cv2.Canny(bg_gray, 100, 200)
gap_edge = cv2.Canny(gap_gray, 100, 200)
# 模板匹配
result = cv2.matchTemplate(bg_edge, gap_edge, cv2.TM_CCOEFF_NORMED)
# 寻找最佳匹配位置
_, max_val, _, max_loc = cv2.minMaxLoc(result)
# print(f"匹配度: {max_val}")
gap_x = max_loc
# 可视化结果(可选,用于调试)
# 在背景图上绘制矩形标记识别到的位置
# h, w = gap_edge.shape
# top_left = max_loc
# bottom_right = (top_left[0] + w, top_left[1] + h)
# cv2.rectangle(bg_image, top_left, bottom_right, (0, 255, 0), 2)
# 显示结果
# cv2.imshow('Detected Position', bg_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
return gap_x
def main(args):
pass
了解DCpage详情,请查看DCpage:基于 DrissionPage 打造的影刀专属自定义指令库