《影刀RPA技巧5》关于shopee虾皮网站验证码通过方法,双缺口曲线滑块拼图验证【验证码挑战】
评论
收藏

《影刀RPA技巧5》关于shopee虾皮网站验证码通过方法,双缺口曲线滑块拼图验证【验证码挑战】

经验分享
Code拾光者(小新)
2026-03-23 10:38·浏览量:1784
Code拾光者(小新)
影刀专家
影刀认证工程师
发布于 2025-09-20 00:37更新于 2026-03-23 10:381784浏览

shopee验证码示例:立即登入盡享安全便利的網購樂趣 | 蝦皮購物

下图是刷新按钮在上的,另外一种是在下的,不要弄错了,两者不通用

可视化流程如下:需要捕获:刷新按钮、滑块按钮两个元素
py编码版代码如下:需要安装requests库
# 使用提醒:
# 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 requests
import base64
import os
from io import BytesIO
from PIL import Image

def image_url_to_base64(image_url):
    """
    将图片链接转换为包含图片头的base64编码字符串,仅在函数执行时禁用代理
    
    参数:
        image_url (str): 图片的网络URL
        
    返回:
        str: 包含图片头的base64编码字符串,出错则返回None
    """
    # 保存原始代理设置(如果有)
    original_no_proxy = os.environ.get("NO_PROXY", None)
    
    try:
        # 临时禁用所有代理,仅在当前函数执行期间有效
        os.environ["NO_PROXY"] = "*"
        
        # 发送请求获取图片
        response = requests.get(image_url, timeout=10)
        response.raise_for_status()  # 检查请求是否成功
        
        # 读取图片内容
        image_data = BytesIO(response.content)
        
        # 打开图片获取格式信息
        with Image.open(image_data) as img:
            img_format = img.format.lower()
            image_data.seek(0)  # 重置文件指针
            
            # 转换为base64编码并添加图片头
            base64_encoded = base64.b64encode(image_data.read()).decode('utf-8')
            result = f"data:image/{img_format};base64,{base64_encoded}"
            
            return result
            
    except requests.exceptions.RequestException as e:
        print(f"网络请求错误: {e}")
    except Exception as e:
        print(f"处理图片时出错: {e}")
    finally:
        # 恢复原始代理设置
        if original_no_proxy is not None:
            os.environ["NO_PROXY"] = original_no_proxy
        else:
            # 如果原本没有设置,则删除这个环境变量
            del os.environ["NO_PROXY"]
    
    return None



def captcha_decoding(bg, front, attrs):

    # 验证码识别接口
    url = "http://bq1gpmr8.xiaomy.net/openapi/verify_code_identify/"
    # 请求头
    header = {"Content-Type": "application/json"}
    # 请求体
    data = {
        # 用户的key
        "key":"*****************",
        # 验证码类型
        "verify_idf_id":"55",
        # 背景大图
        "img1":image_url_to_base64(bg),
        # 滑块小图
        "img2":image_url_to_base64(front),
        # 中文点选,空间语义类型验证码的文本描述(这里缺省为空字符串)
        "words":attrs
    }

    # 发送请求调用接口
    response = requests.post(url=url, json=data, headers=header)

    # 获取响应数据,识别结果
    result = response.text
    return result
    pass
第77行代码需要注册得塔云来获取密钥:OpenAPI


最终运行效果:



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