python获取滑块验证码需要滑动的距离

news2024/11/13 12:53:11

我们以这个网站为例: http://120.86.191.138/hbgs/zwgk/dirData.do?dirId=402881204e959150014e959f42f30014&subjectId=93e889f2501d3fe8015024305bdf0efc
往后点到第四页后会出现验证码

一.获取到背景图片和缺口图片

在这里插入图片描述
我们发现图片是base64格式通过API直接发送

二.识别缺口位置输出x距离

img_data = base64.b64decode(img_data)  # png
img_btn_data = base64.b64decode(img_btn_data)  # png
# 读取图片
img = Image.open(io.BytesIO(img_data))
img_btn = Image.open(io.BytesIO(img_btn_data))
# 识别缺口
left = identify_gap(img, img_btn, bg_params, gp_params)[0]
print(left)

identify_gap.py

import cv2
import numpy as np


def identify_gap(background, gap, bg_edge_list: list[int], gp_edge_list: list[int]):
    """
    获取缺口的X坐标

    使用OpenCV的边缘检测实现

    :param background: 背景图片对象
    :param gap: 缺口图片对象
        图片对象可以是cv2.imread('opencv_logo.jpg',0)
        也可以是PIL.Image.open('opencv_logo.jpg')
    :param bg_edge_list: 背景图片对比度调整参数[50, 100] 50为最小对比度,100为最大对比度
    :param gp_edge_list:缺口图片对比度调整参数[50, 100] 50为最小对比度,100为最大对比度
    :return:
    """

    background_image = background  # 背景图片
    background_image = np.array(background_image)
    gap_image = gap  # 缺口图片
    gap_image = np.array(gap_image)
    # 识别图片边缘
    background_edge = cv2.Canny(background_image, bg_edge_list[0], bg_edge_list[1])
    gap_edge = cv2.Canny(gap_image, gp_edge_list[0], gp_edge_list[1])

    # 转换图片格式
    background_picture = cv2.cvtColor(background_edge, cv2.COLOR_GRAY2RGB)

    gap_picture = cv2.cvtColor(gap_edge, cv2.COLOR_GRAY2RGB)

    res = cv2.matchTemplate(background_picture, gap_picture, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # type: ignore

    return max_loc

3.完整代码

import base64
import io
import re
import requests
from PIL import Image
from packages.scrapy_spiders.utils.captcha.compare_image import identify_gap
def getlist_cookie(yzm_res):
    """
    获取验证码返回的set-cookie并返回
    :param response:
    :return dic:
    """
    extracted_cookies = {}
    cookies = yzm_res.headers["Set-Cookie"].split(",")
    # 解析Set-Cookie头部中的cookies
    for cookie in cookies:
        parts = cookie.split(";")[0].split("=")
        if len(parts) == 2:
            key, value = parts
            extracted_cookies[key.strip()] = value.strip()
    return extracted_cookies
def generate_random_string():
    htmlurl='http://120.86.191.138/hbgs/verify/index.do'
    response = requests.get(htmlurl).text
    # 编写正则表达式来匹配verify后的值,注意这里我们使用了转义字符来匹配冒号和单引号
    pattern = r"verify\s*:\s*'([^']*)'"

    # 使用re.search查找匹配项
    match = re.search(pattern, response)

    # 如果找到匹配项,则提取括号内的内容(即需要的值)
    if match:
        value = match.group(1)
        print("提取的verify值为:", value)
    else:
        print("未找到匹配的verify值")
        return None

    return value

ssst=generate_random_string()

yzm_url=f'http://120.86.191.138/hbgs/verify/get_img_verify.do?verify={ssst}'
res=requests.get(yzm_url)
cookies = getlist_cookie(res)
res=res.json()
bg_params = [100, 200]
gp_params = [100, 200]
img_data=res["oriCopyImage"]
img_btn_data=res["newImage"]
img_data = base64.b64decode(img_data)  # jpg
img_btn_data = base64.b64decode(img_btn_data)  # png
# 读取图片
img = Image.open(io.BytesIO(img_data))
img_btn = Image.open(io.BytesIO(img_btn_data))
# 识别缺口
left = identify_gap(img, img_btn, bg_params, gp_params)[0]
print(left)

dataurl='http://120.86.191.138/hbgs/verify/check.do'
header={
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
formdata=f'verify={ssst}&IY={res["Y"]}&X={left}&Y={res["Y"]}'

res2=requests.post(dataurl, formdata,cookies=cookies,headers=header).json()
print(res2)
itemurl='http://120.86.191.138/hbgs/zwgk/item.do'
formdata=f'page=6&rows=20&HBTB_XH=&HBTB_XH_END=&HBTB_XMMC=&HBTB_SPWH=&HBTB_TXDZ=&HBTB_GSSJ=&HBTB_GSSJ_END=&dirId=402881204e959150014e95bb85b5010f&subjectId=93e889f2501d3fe8015024305bdf0efc&backPage=&vcode={res2["data"]}'

res=requests.post(itemurl, formdata)
print(res.text)

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

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

相关文章

铲屎官进!宠物空气净化器真的有用吗?哪款去浮毛效果好

国庆小长假就要来了,别人都在苦恼抢票问题,而我在想会不会被我妈赶出家门... 毕业后我就留在了广州上班,独自一人租房难免会感觉孤独,就养了一只小猫和我作伴。这次放假这么久,我不放心留它一个人在家,也没…

vulhub搭建漏洞环境docker-compose up -d命令执行报错以及解决方法汇总

在利用vulhub靶场搭建环境进行漏洞复现时,我们通常要使用这一步命令: docker-compose up -d 但是经常报错,今天我们来说几个常见的报错以及解决方法: 1.报错提示: ERROR: Couldnt connect to Docker daemon at httpdoc…

基于atlas环境下YOLOV7的睡岗识别

做到这里,其实只是想探索下新的检测框架、探索下atlas下ACL的推理方式。整个过程持续了3-4周把,回顾一下,感觉还是需要一些技巧才能拿下,如果没有任何经验的是断难搞定此代码的。主要基于华为的官方例子,里面修改了原始…

ApplicationEvent 事件泛型封装记录

一、一个事件的封装、发布以及监听 事件类封装 把需要的信息封装到一个事件类中 Data public class Person {private String name; }Data public class PersonEvent {private Person person;private String addOrUpdate;public PersonEvent(Person person, String addOrUpda…

【云安全】云服务安全攻防

一、云服务安全事件 1、CVE-2021-44228: AWS Log4Shell热补丁漏洞,用来进行容器逃逸和权限提升 2、CVE-2022-30137: Microsoft Azure Service Fabic权限提升漏洞,允许攻击者在容器内提升权限至主机节点root权限 FabricScape: Esca…

神奇的css动画:animation、transform、transition

前言 动画包括两个部分:描述动画的样式和用于指定动画开始、结束以及中间点样式的关键帧。 相比较于传统的脚本实现动画技术,使用css动画三个主要优点: 1.能够非常容易创建简单动画,甚至不需要了解JavaScript就能创建动画 2.动画运行效果…

Trainer API训练属于自己行业的本地大语言模型 医疗本地问答大模型示例

Trainer API 是 Hugging Face transformers 库中强大而灵活的工具,简化了深度学习模型的训练和评估过程。通过提供高层次的接口和多种功能,Trainer API 使研究人员和开发者能够更快地构建和优化自然语言处理模型 文章目录 前言一、Trainer API它能做什么…

Machine Learning Specialization 学习笔记(3)

文章目录 前言一、神经网络基本概念基本组成工作流程训练过程类型应用举例不同层次特征的学习 为什么从基础特征到复杂特征逐渐推进什么是感受野更简单的解释具体示例总结 二、TensorFlow实现简单神经网络安装及环境配置数据预处理标准化 Dense层Convolutional Layer训练DEBUG …

独立站技能树/工具箱1.0 总纲篇丨出海笔记

正所谓要把一件事做到90分很难,但做到60分基本上照着SOP做到位都没问题,如果我们能把每件事都做到60分,那绝对比至少60%的人都强,除非你的对手不讲武德——那就是他很可能看了我这篇文章,不但每方面都超过及格线&#…

MySQL高阶1853-转换日期格式

目录 题目 准备数据 分析数据 总结 题目 给定一个Days表,请你编写SQL查询语句,将Days表中的每一个日期转化为"day_name, month_name day, year"格式的字符串。 返回的结果表 不计顺序 。 准备数据 Create table If Not Exists Days (d…

Arthas 全攻略:让调试变得简单

文章目录 一、简介二、命令列表 一、简介 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常&#xff…

排序---冒泡排序、堆排序

一、冒泡排序 相邻两个位置交换,假设排升序,就不断把最大的往后拿,所以这段序列从后往前变得有序。 //flag为0,即这个数组已经是有序的了,节省循环次数 二、堆排序(数组实现) 具体原理介绍看这…

jetcache-阿里多级缓存框架神器一定要掌握

文章目录 1. 简介2. springboot集成jetcache2.1 引入依赖2.2 配置文件2.3 高级API模式:通过CacheManager使用缓存,2.7 版本才可使用2.4 (推荐)AOP模式:通过Cached,CacheUpdate,CacheInvalidate注解 1. 简介 JetCache是…

局部整体(六)利用python绘制树状图

局部整体(六)利用python绘制树状图 树状图( Dendrogram)简介 由一个根节点组成,根节点产生多个通过分支连接的子节点。常用于表示层次结构或显示聚类算法的结果。树状图既可以看明白数据的层次结构,也能明…

兴业小知识|法拍房你不知道的省钱小技巧~划走可就亏大了

如果说二手房市场是买卖双方之间的博弈,那法拍房市场则是纯买方的心理游戏。 在法拍房竞拍过程中,有人稳如泰山,有人坐立不安,每一次的出价都是对相互底线的一番试探。 有激进竞拍,拍出天价的,有一举夺魁…

2024.9.20营养小题【2】(动态分配二维数组)

这道题里边涉及到了动态分配二维数组的知识点,不刷这道题我也不知道这个知识点,算是一个比较进阶一点的知识点了。 参考:C语言程序设计_动态分配二维数组_哔哩哔哩_bilibili【C/C 数据结构 】二维数组结构解析 - 知乎 (zhihu.com)

网络爬虫Request静态页面数据获取

在现代 Web 开发中,HTTP 请求(Request)是与服务器进行通信的核心操作。无论是在前端还是后端开发中,数据的获取、传递以及处理都离不开请求的应用。特别是在静态页面的数据获取中,使用请求可以将页面变得更加动态和互动,从而大大提升用户体验,使得页面内容更加丰富和灵活…

电风扇制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

电风扇正悄然成为制造业数字化转型浪潮中的一颗璀璨新星。通过构建5G智能工厂物联数字孪生平台,电风扇制造业正以前所未有的速度和精度,推进着整个行业的智能化、网络化与个性化发展。5G技术的飞速发展,为制造业带来了前所未有的通信速度和低…

vue 入门一

参考&#xff1a;丁丁的哔哩哔哩 1.使用vue 1.1 使用CDN的方式使用Vue mount和<div id"counter">关联起来 1.2 vue中的createApp import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app&qu…

【软件测试】如何设计测试用例? 设计测试用例常用的方法.

目录 一.什么是测试用例?二.总体设计测试用例的万能公式.2.1 功能性能界面兼容易用安全2.2 弱网测试2.3 安装卸载测试. 三. 常用设计具体测试用例的方法3.1 等价类3.2 边界值3.3 正交法3.3.1 正交表3.3.2 如何设计正交表,并根据正交表编写测试用例 3.4 判定表法3.4.1 根据判定…