展示完整代码

完整的代码如下所示:

from playwright.sync_api import sync_playwright
import cv2
import numpy as np


def calculate_sliding_distance(captcha_image_path, slider_image_path):
    # 使用 OpenCV 加载图像
    background_cv = cv2.imread(captcha_image_path)
    slider_cv = cv2.imread(slider_image_path)

    # 实现滑块位置和背景图像位置的识别和计算滑动距离的算法,这里仅作示例
    # ...

    # 计算滑动距离
    distance = 100  # 这里以固定的滑动距离为例

    return distance


def solve_slider_captcha(page):
    # 等待滑动验证码元素加载完成
    slider_element = page.wait_for_selector('body > div:nth-child(4) > div > div.ant-modal-wrap > div > div.ant-modal-content > div > div:nth-child(1) > div > div.rc-slider-captcha-control > span')

    # 获取验证码背景图像和滑块图像的 base64 编码
    background_image = page.eval_on_selector('.slider .back img', 'e => e.currentSrc')
    slider_image = page.eval_on_selector('.slider .front img', 'e => e.currentSrc')

    # 下载并保存验证码背景图像和滑块图像
    background_image_path = '/path/to/background.png'
    slider_image_path = '/path/to/slider.png'
    page.screenshot(path=background_image_path, clip=background_image.bounding_box)
    page.screenshot(path=slider_image_path, clip=slider_image.bounding_box)

    # 计算滑动距离
    distance = calculate_sliding_distance(background_image_path, slider_image_path)

    # 模拟用户拖动滑块
    slider_element.drag_to(Point(x=distance, y=0))

    # 验证滑动验证码是否成功
    # ...

    # 删除保存的图像文件
    os.remove(background_image_path)
    os.remove(slider_image_path)


with sync_playwright() as playwright:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()

    page.goto('http://113.108.148.250:30018/login?client_id=cygr&redirect_url=http%3A%2F%2F113.108.148.250%3A30010%2Flogin')

    # 输入用户名和密码
    page.fill('//*[@id="__next"]/div/div/div/div/div[2]/form/div[2]/span[1]/input', '98491')
    page.fill('//*[@id="__next"]/div/div/div/div/div[2]/form/div[2]/span[2]/input', 'qdfe@qwE')
    page.wait_for_timeout(3000)

    # 等待登录按钮出现并点击
    page.wait_for_selector('//*[@id="__next"]/div/div/div/div/div[2]/form/div[3]/button').click()
    page.wait_for_timeout(2000)

    # 等待滑动验证码出现,并处理
    solve_slider_captcha(page)

    # 继续后续操作
    # ...

    context.close()
    browser.close()

此代码用于处理滑动验证码,实现了两个函数 calculate_sliding_distance()solve_slider_captcha()

calculate_sliding_distance() 函数负责根据验证码和滑块图像计算滑动距离,您需要根据您的验证码进行相应的逻辑实现。

solve_slider_captcha() 函数用于等待滑动验证码元素加载完成,获取验证码背景图像和滑块图像的 base64 编码,然后将它们下载并保存为图片文件,计算滑动距离,模拟用户拖动滑块,并验证滑动验证码是否成功。您还需要根据您的验证码和页面结构来修改该函数中的选择器,以正确匹配您的元素。

请根据您的实际情况修改代码,并确保您已经配置了正确的文件路径和元素选择器。如果您还有其他问题,请随时向我提问。