DCpage:搞定反验证码网站就是如此简单,py纯免费无需云码接口
评论
收藏

DCpage:搞定反验证码网站就是如此简单,py纯免费无需云码接口

经验分享
【耐家军】DC
2026-01-06 11:44·浏览量:748
【耐家军】DC
影刀专家
影刀认证工程师
发布于 2026-01-06 11:44748浏览

反自动化网址

打开链接: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 打造的影刀专属自定义指令库

收藏22
全部评论1
最新
发布评论
评论