爬虫:写了一个解析拖动滑块进行登录校验的伪代码

news2024/12/21 21:42:04

完成滑动拼图验证码是一个更复杂的任务,因为它通常涉及准确地将滑块拖动到正确的位置以匹配拼图缺口的位置。要实现这一点,通常需要进行以下步骤:

  1. 识别拼图缺口的位置。
  2. 计算滑块的拖动距离。
  3. 模拟人类行为完成拖动。

由于 Playwright 本身没有图像处理的能力,通常需要结合其他库(如 OpenCV)来实现拼图的识别。以下是一个基本的思路和示例代码,演示如何使用 Playwright 和 OpenCV 组合来完成这个任务。

基本步骤

  1. 获取拼图和滑块的截图。
  2. 使用图像处理库(如 OpenCV)来定位拼图缺口的位置。
  3. 计算滑块需要移动的距离。
  4. 模拟滑块拖动的操作。

示例代码

下面是一个结合 Playwright 和 OpenCV 实现拼图滑块验证码的示例:

from playwright.async_api import async_playwright
import cv2


# 登录操作
async def login(page):
    url = ''
    await page.goto(url)
    await page.fill("input#username", "username")
    await page.fill("input#password", "password")
    await page.click("button#login")

    # 等待滑块验证码加载完成
    await page.wait_for_selector(".slider-track")


async def get_screenshot_of_element(page, selector, path):
    element = await page.query_selector()
    bounding_box = element.bounding_box()
    await page.screenshot(path=path, clip=bounding_box)


async def find_gap_in_puzzle(background_path, puzzle_piece_path):
    # 读取背景图像和拼图块图像
    background = cv2.imread(background_path, 0)
    puzzle_piece = cv2.imread(puzzle_piece_path, 0)
    
    # 使用OpenCV模板匹配找到拼图块的位置
    result = cv2.matchTemplate(background, puzzle_piece, cv2.TM_CCORR_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    
    return max_loc[0]


async def complete_slider_verification(page, drag_distance):
    # 获取滑块元素
    slider = await page.query_selector('.slider-handle')
    slider_handle = await slider.bounding_box()

    # 模拟拖动滑块
    await page.mouse.move(slider_handle['x'] + slider_handle['width'] / 2, slider_handle['y'] + slider_handle['height'] / 2)
    await page.mouse.down()
    await page.mouse.move(slider_handle['x'] + drag_distance, slider_handle['y'] + slider_handle['height'] / 2, steps=30)
    await page.mouse.up()

    # 等待验证完成
    await page.wait_for_load_state('networkidle')


async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()

        # 登录操作
        await login(page)

        # 获取背景和拼图块的截图
        await get_screenshot_of_element(page, ".slider-track", "background.png")
        await get_screenshot_of_element(page, ".slider-handle", "puzzle_piece.png")

        # 计算滑块需要拖动的距离
        gap_position = find_gap_in_puzzle("background.png", "puzzle_piece.png")
        slider_position = await page.query_selector(".slider-handle").bounding_box()['x']
        drag_distance = gap_position - slider_position

        # 完成滑块验证
        await complete_slider_verification(page, drag_distance)

        # 继续执行其他操作
        print("拼图滑块验证完成")

        await browser.close()


if __name__ == "__main__":
    main()

代码说明

  1. login(page): 模拟用户登录,并等待滑块验证码加载完成。

  2. get_screenshot_of_element(page, selector, path): 使用 Playwright 截取指定元素的截图,并保存为文件。这些截图用于后续的图像处理。

  3. find_gap_in_puzzle(background_path, puzzle_piece_path):

    • 使用 OpenCV 读取背景和拼图块的图像。
    • 通过模板匹配(cv2.matchTemplate)找到拼图块的缺口位置,并返回其 x 坐标。
  4. complete_slider_verification(page, drag_distance):

    • 使用 Playwright 模拟滑块的拖动操作,拖动到计算出的距离位置。
    • main(): 整合所有步骤,执行登录、拼图缺口识别、滑块拖动验证。

注意事项

  • 选择器调整: 滑块和拼图背景的选择器(如 .slider-handle 和 .slider-track)需要与你的网页元素匹配,可能需要调整。
  • 准确性: 如果模板匹配的结果不够准确,可能需要进一步调整或使用更复杂的图像处理技术来提高识别精度。
  • 人类行为模拟: 在滑块拖动过程中,可以通过调整 steps 参数来模拟更接近人类的滑动行为,减少被识别为机器人操作的风险。

进阶处理

  • 验证码变种: 如果验证码种类多样(例如背景图干扰、滑块形状变化),可能需要更复杂的图像处理或机器学习技术。
  • 滑块路径非线性: 某些验证码可能要求滑块按非线性路径滑动,处理这些情况可能需要更复杂的路径规划。

最后说明

这个示例提供了一个基础框架,你可以根据实际需要对代码进行调整和优化。

另外

目前要解决的是下面这种图片,人机验证还有其它的方式,针对不同的校验方式要写不同的方法。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2041629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Doxygen程序注释文档制作教程

Doxygen教程 Doxygen软件下载安装Doxygen软件的使用Doxygen Comments扩展参考文献Doxygen软件下载安装 首先,在官网下载windows环境下的doxygen,网址: Doxygen: Downloads 找到对应安装包点击下载 下载完成后傻瓜式一步一步安装就可以了。安装完成后在开始栏点击Doxywizar…

ptrade排坑笔记——量化界面一直无法正常访问!

前言 今天和大家分享的一个问题是量化界面相关的,量化界面打不开的一个问题,具体界面如图! 一、问题描述 问题很简单,就是客户的量化交易界面无法打开,问题简单但是关系很大,量化策略的研究、回测都是在…

教你如何在同一台手机上同时登录两个微信

我们先手机应用中点开设置 里面找到应用公设置 在里面点击应用双开 或者 应用分身 手机不同会有所不同 然后 我们将微信的这个开关打开 这样 手机上就能同时使用两个微信啦

安防监控视频平台视图服务系统视频监控汇聚平台图库使用说明

视图汇聚共享网关是一款软硬件一体化的设备,支持多种协议的IPC/NVR/DVR视图数据接入,包括ONVIF、GB/T 28181、RTSP、1400、FTP以及海康、大华的私有协议。该设备还通过GB/T 28181、1400、FTP等协议共享视图数据,具备广泛的接入范围和开放共享…

【leetcode图文详解】特殊数组II : 空间换时间的“记忆化”,越多越好吗?

题目详解 需求:判断给定区间内的元素是否满足“特殊数组”要求 尝试: 暴力求解? 如果试着直接对每个queries中的区间进行检测而不做其他处理,那么最后不出意外地超时了。。 细想优化策略,不难察觉到其中可能存在大量的重复运算 那还等什…

Python Word文档安全 - 设置和解除Word文档保护

目录 使用工具 Python 给 Word 文档设置密码保护 Python 限制 Word 文档的编辑 Python 保护 Word 文档的同时留出可编辑区域 Python 解除 Word 文档的密码保护 Python 解除 Word 文档的编辑限制 在日常工作和学习中,我们经常需要使用Word文档来记录和分享重要…

【附源码】Python :圆锥建模

系列文章目录 Python 建模入门:圆锥建模 文章目录 系列文章目录一、建模需求二、源代码三、代码分析四、效果展示总结 一、建模需求 使用matplotlib库和mpl_toolkits.mplot3d模块来绘制一个带有坐标轴的圆锥体的3D图形 二、源代码 代码如下: import ma…

检验流程的信息化系统——LIS

LIS系统源码,C#LIS系统源码,自主版权医院应用案例 医院检验系统的发展历程 医院检验系统的发展经历了多个阶段,从最初的简单手工操作到自动化仪器应用,再到数字化信息管理系统的建立,逐渐实现了检验流程的信息化、智…

JAVA实现GB/T 32960.3—2016电动汽车远程服务与管理系统技术规范 第3部分:通信协议及数据格式

完整的TCP服务端解析代码 1.maven依赖 不要的依赖自行删除&#xff0c;懒的删了 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…

C语言实现数据结构之队列

目录 队列一. 队列的概念及结构二. 队列的实现1. 要实现的功能2 具体的实现2.1 结构体2.2 初始化2.3 入队列2.4 出队列2.5 返回队首元素2.6 返回队尾元素2.7 队列元素个数2.8 队列判空2.9 队列销毁 三. 队列相关OJ题设计循环队列用队列实现栈用栈实现队列 四. 概念选择题五. 参…

WordPress公众号扫码登录/注册

目录 一、扫码过程概述 1.扫码进入公众号 2.输入关键字 3.输入验证码 4.登录验证 5.后续操作 6.基础要求 二、插件安装 三、公众号设置 五、登录页码制作 六、扫码登录测试 WordPress建设的网址,是支持用户注册的,不过不如使用“微信扫码”登录来的简单。不过要想…

IO

目录 一、IO流基本认识 1.1 字节流 1.2 字符流 1.3 高级流 二、IO流基本理解 2.1 IO流的分类 2.1.1 按照流的流向 2.1.2 按照处理数据单位 2.1.3 按照流的角色 2.2 IO流的选择 2.3 IO流的4个抽象基类 2.4 字节流和字符流的区别 2.4.1 使用场景 三、IO模型 3.1 BI…

Leetcode JAVA刷刷站(10)正则表达式匹配

一、题目概述 二、思路方向 在Java中&#xff0c;实现一个支持.和*的正则表达式匹配器&#xff0c;可以通过递归或动态规划&#xff08;DP&#xff09;的方法来完成。这里&#xff0c;我将使用动态规划的方法来解决这个问题&#xff0c;因为它更容易理解和实现。 动态规划的思…

代码随想录算法训练营43期 | Day 13 —— 二叉树part01

代码随想录算法训练营 二叉树理论基础二叉树的种类1. 满二叉树2. 完全二叉数3. 二叉搜索树3. 平衡二叉搜索树 二叉树的存储方式二叉树遍历方式二叉树的定义 二叉树的递归遍历144.前序遍历145.后序遍历94.中序遍历 二叉树迭代遍历前序遍历&#xff08;迭代法&#xff09;后序遍历…

实战项目:贪吃蛇游戏的实现(下)

前言 今天我们将继续贪吃蛇游戏的实现&#xff0c;紧接上期我们已经实现了贪吃蛇游戏的大部分基础知识&#xff0c;我们上期主要是学习了Windows系统的API函数,并实现了大部分的贪吃蛇设计&#xff0c;那这期我们将完成剩余的设计部分&#xff0c;并完成代码的实现。 好&…

UEC++学习(十六)变量添加中文注释、ui设置中文文本

&#xff08;一&#xff09;变量添加中文注释 在C 项目中创建变量&#xff0c;并在蓝图中显示变量的英文名同时附带中文注释&#xff0c;可以使用UPROPERTY 的 ToolTip 元数据属性来实现 UPROPERTY(EditAnywhere, meta (ToolTip "弹夹最大容量"))int32 MagCapacit…

目标检测算法,Yolov7本地化部署标注、训练(二)

安全帽检测、口罩检测、行为检测、目标物体检测&#xff0c;随着深度学习和计算机视觉技术的不断发展&#xff0c;目标检测成为了研究热点之一。YOLOv7作为YOLO系列的新成员&#xff0c;以其高效和准确的性能受到了广泛关注。本文将介绍如何在本地部署并利用YOLOv7完成目标检测…

StormBamboo 入侵 ISP 并滥用不安全的软件更新机制

关键要点 StormBamboo 成功入侵了一家互联网服务提供商 (ISP)&#xff0c;以毒害目标组织的 DNS 响应。不安全的软件更新机制旨在在运行 macOS 和 Windows 的受害者机器上秘密安装恶意软件。StormBamboo 部署的恶意软件包括 MACMA 恶意软件的新变种。对 MACMA 最新版本的分析表…

Python学习入门实验

&#xff08;1&#xff09;掌握python数字类型的使用方法 &#xff08;2&#xff09;掌握将数学表达式转换成python语言表达式的方法及注意 &#xff08;3&#xff09;掌握有关运算符号的特殊要求 &#xff08;4&#xff09;掌握输入、输出函数的使用方法 &#xff08;5&am…

Python与netCDF数据之全面解析空间偏相关分析详解

概要 在气象学、海洋学、环境科学等领域,netCDF(Network Common Data Form)是一种常用的数据格式,用于存储和共享多维科学数据。偏相关分析(Partial Correlation Analysis)是一种统计方法,用于研究多个变量之间的关系,同时控制其他变量的影响。本文将详细介绍如何使用…