完整的代码如下所示:
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 编码,然后将它们下载并保存为图片文件,计算滑动距离,模拟用户拖动滑块,并验证滑动验证码是否成功。您还需要根据您的验证码和页面结构来修改该函数中的选择器,以正确匹配您的元素。
请根据您的实际情况修改代码,并确保您已经配置了正确的文件路径和元素选择器。如果您还有其他问题,请随时向我提问。