破译滑块验证间距 破译sf顺丰滑块验证

news2024/12/27 12:06:12

废话不多说直接开干!

在这里插入图片描述

from selenium import webdriver
# 导入配置
from selenium.webdriver.chrome.options import Options
import time
from PIL import Image
# 导入动作链
from selenium.webdriver.common.action_chains import ActionChains
import random, string
# 定义计算移动距离的函数
def get_difference(image1,image2):
    """
    循环每一个点,计算出对应的像素值
    """
    # 外层循环循环长度
    for i in range(image1.width):
        # 内层循环循环宽度
        for j in range(image1.height):
            # 找出缺口
            if not is_similar(image1,image2,i,j):
                return i

# 定义找出缺口位置的函数
def is_similar(image1,image2,x,y):
    # 计算RGB值
    pixel1 = image1.getpixel((x,y))
    pixel2 = image2.getpixel((x,y))
    # 设置一个容差范围,设置30位容差范围
    if abs(pixel1[0] - pixel2[0]) >30 and abs(pixel1[1] - pixel2[1]) > 30 and abs(pixel1[2] - pixel2[2])>30:
        return False
    return True

# 定义获取运动轨迹函数
def get_tracks(distance):
    """
    v = v0+at
    x = v0t+1/2at**2
    """
    # 定义存放运动轨迹的列表
    tracks = []
    # 定义初速度
    v = 0
    # 定义单位时间
    t = 0.5
    # 定义匀加速运动和匀减速运动的分界线
    mid = distance * 4/5
    # 定义当前位移
    current = 0
    # 为了一直移动,定义循环
    while current < distance:
        if mid > current:
            a = 2
        else:
            a = -3
        v0 = v
        # 计算位移
        x = v0 * t + 1/2*a*t**2
        # 计算滑块当前位移
        current += x
        # 计算末速度
        v = v0+a*t
        tracks.append(round(x))
    return tracks

# 实例化Options对象
options = Options()

# 启动开发者模式
options.add_experimental_option('excludeSwitches',['enable-automation'])
options.add_experimental_option('useAutomationExtension',False)

# 2. 调用浏览器
driver = webdriver.Chrome(executable_path=r'D:\chorme\Chrome\Application\chromedriver.exe',options=options)

# 将webdriver属性干掉
driver.execute_cdp_cmd(
    "Page.addScriptToEvaluateOnNewDocument",{
        "source":'Object.defineProperty(navigator,"webdriver",{get:()=>undefined})'
    }
)

# 最大化窗口
driver.maximize_window()

# 3. 请求
driver.get(url='https://www.sf-express.com/we/ow/chn/sc/waybill/waybill-detail/SF1638641302904')

# 出现滑块验证码
# 发现:每一个滑块移动的距离都是不同的,差距也比较大,所以,不能够写一个固定的移动距离
# 思路:将移动距离计算出来
# 核心:
# 1. 找出无缺口的图片
# 2. 使用有缺口的图片和无缺口的图片做对比
# 目的:获取移动的距离(确定缺口位置)

# 休眠,等待验证码加载
time.sleep(3)

# 截图,获取有缺口图片
driver.switch_to.frame('tcaptcha_iframe')
# elements = driver.find_element_by_xpath('//*[@id="tcWrap"]')
driver.save_screenshot('quekou.png')

# 找到图片
# driver.switch_to.frame('tcaptcha_iframe')
element = driver.find_element_by_xpath('//*[@id="tcWrap"]')

# 获取图片位置
# loaction:获取元素位置
# size:获取元素大小
print(element.location)
print(element.size)

# 计算截图范围
left = element.location['x']
right = element.location['x'] + element.size['width']
top = element.location['y']
bottom = element.location['y'] + element.size['height']

# 打开图片
im = Image.open('quekou.png')
# # 开始局部截图
im = im.crop((left+502,top+150,right+502,bottom+150))
im.save('quekou_jubu.png')


# 执行js,显示无缺口图片
# driver.execute_script('document.getElementsByClassName("geetest_canvas_fullbg")[0].style="display:block"')
driver.find_element_by_xpath('//*[@id="slideBlock"]')
#
# # 截取无缺口图片
driver.save_screenshot('wuque.png')
#
im = Image.open('wuque.png')
# 开始局部截图
im = im.crop((left+560,top+710,right,bottom))
# im.save('wuque_jubu.png')

# 将两张图片进行对比,计算移动距离
# wuque_jubu = Image.open('wuque_jubu.png')
# quekou_jubu = Image.open('quekou_jubu.png')
# distance = get_difference(wuque_jubu,quekou_jubu)
# 142 150 155

ua_list = [  142,150, 155,160]

for ii in ua_list:
    distance = ii

    # 获取滑块
    huakuai = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')
    ActionChains(driver).click_and_hold(on_element=huakuai).perform()
    ActionChains(driver).move_by_offset(xoffset=(distance+54)*0.8,yoffset=0).perform()
    tracks = get_tracks((distance+54)*0.2)
    for track in tracks:
        ActionChains(driver).move_by_offset(xoffset=track,yoffset=0).perform()

    time.sleep(1)

    # 释放鼠标
    ActionChains(driver).release().perform()
    time.sleep(5)
    try:
        status = driver.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[2]/div[3]/div[2]/div/div[2]/div/ul[1]/li[1]/span').text
        time = driver.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[2]/div[3]/div[2]/div/div[2]/div/ul[1]/li[3]/span').text
        content = driver.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[2]/div[3]/div[2]/div/div[2]/div/ul[1]/li[4]/span').text

        print(status,time,content)
        driver.quit()
        break
    except Exception:
        pass

print('succ')

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

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

相关文章

如何获取高质量的微信私域客户?

在当今数字化时代&#xff0c;企业都在努力寻求创新的营销方式来获取更多的客户。微信私域流量作为一种精准的营销工具&#xff0c;越来越受到企业的青睐。那么&#xff0c;如何获取高质量的微信私域客户呢&#xff1f;本文将为你揭示这一难题的答案&#xff0c;让你轻松Get高转…

STM32--MQ2烟雾传感器

本文主要介绍STM32F103C8T6和烟雾传感器模块的控制算法 简介 烟雾模块选用MQ-2气体传感器&#xff0c;根据传感器的电导率随空气中可燃气体浓度的增加而增大的特性检测空气中可燃气体&#xff0c;然后将电导率的变化转换成对应的电信号 MQ系列烟雾传感分类如下&#xff1a; 该…

基于SSM的校园二手物品交易平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Python之字符串构造

Python之字符串构造 字符串str 一个个字符组成的有序的序列&#xff0c;是字符的集合使用单引号、双引号、三引号引住的字符序列字符串是不可变对象&#xff0c;是字面常量 Python3起&#xff0c;字符串都是Unicode类型 x abcde使用for循环遍历x的值&#xff0c;打印并查看…

九小场所消防安全检查安全码系统

九小场所安全码&#xff0c;实现消防安全监督管理&#xff0c;落实消防安全责任&#xff0c;形成九小场所网格化监控、动态化管理&#xff1b; 安全码流程化管理 监管部门日常检查&#xff0c;微信扫码即可填写检查记录&#xff0c;现场可拍照、视频、文字、记录检查情况&…

1200*C. Challenging Cliffs(模拟构造贪心)

Problem - 1537C - Codeforces Challenging Cliffs - 洛谷 解析&#xff1a; 排序数组&#xff0c;然后找出间隔最短的两个相邻的数 a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e&#xff0c;f &#xff08;假设b&#xff0c;c为差最小的两个数&#xff09;。 然后…

虫情测报灯如何实现自动化测报?

一、KH-CQPest虫情测报灯的工作过程 虫情测报灯是新一代的图像式虫情测报智能设备&#xff0c;在农业虫害防治领域拥有独特魅力&#xff0c;它内置高像素的摄像头&#xff0c;能够精准记录并将照片上传至智慧农业平台识别害虫的形态、种类。虫情测报灯运用现代光电数控集成技术…

【深蓝学院】手写VIO第2章--IMU传感器--作业

这次作业坑很多&#xff0c;作业说明的不清楚&#xff0c;摸索了很长时间才将此次作业完成&#xff0c;在这里进行记录。 1. T1 1.1 题干 1.2 解答 1.2.1 法1&#xff0c;ros related方法 不知道为什么我的launch不了&#xff0c;在imu_utils目录下面建立build后&#xff0…

剑指offer——JZ7 重建二叉树 解题思路与具体代码【C++】

一、题目描述与要求 重建二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出…

[Spring] @Bean 修饰方法时如何注入参数

目录 一、Bean 的简单使用 1、正常情况 2、问题提出 二、解决方案 1、Qualifier 2、直接写方法名 三、特殊情况 1、DataSource 一、Bean 的简单使用 在开发中&#xff0c;基于 XML 文件配置 Bean 对象的做法非常繁琐且不好维护&#xff0c;因此绝大部分情况下都是使用…

计算机竞赛 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

分析“由于找不到msvcp120.dll无法继续执行代码”的原因及解决方法

在计算机使用过程中&#xff0c;我们可能会遇到一些莫名其妙的错误提示&#xff0c;其中“由于找不到 msvcp120.dll 无法继续执行代码”就是一种常见的困扰。这种错误提示的出现往往会给用户带来一定的烦恼&#xff0c;因为不清楚究竟是什么原因导致了这个错误&#xff0c;也不…

Zabbix自定义脚本监控MySQL数据库

一、MySQL数据库配置 1.1 创建Mysql数据库用户 [rootmysql ~]# mysql -uroot -p create user zabbix127.0.0.1 identified by 123456; flush privileges; 1.2 添加用户密码到mysql client的配置文件中 [rootmysql ~]# vim /etc/my.cnf.d/client.cnf [client] host127.0.0.1 u…

【Python基础】字典和函数拓展

文章目录 前言一、字典1.1 字典是什么&#xff1f;1.2 字典的定义和操作字典的定义访问字典元素修改字典元素添加新键值对删除键值对 二、函数的拓展2.1 多返回值的函数2.2 调用函数并接收多个返回值2.3 多参数的函数2.4 函数作为参数传递2.5 示例代码 总结 前言 Python作为一…

信看课堂-厘米GNSS定位

我们常常说GPS 定位&#xff0c;不过定位远不止GPS定位&#xff0c;通过本节课程&#xff0c;我们将会了解到&#xff0c;原来GPS只是定位的一种&#xff1a; GNSS概述 不同的GNSS系统使用不同的频段来传输导航信号。以下是一些主要的GNSS系统及其相应的频段&#xff0c;用表…

Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件

Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件 大家好&#xff0c;我是艾西有不少小伙伴非常喜欢我的世界Minecraft游戏&#xff0c;今天小编跟大家分享下Minecraft个人服务器怎么设置皮肤站。 Minecraft皮肤站是什么&#xff1f;其实官网就有皮肤站…

超声波气象站——环境监测领域强大助手

超声波气象站是环境监测领域的一位强大助手&#xff0c;超声波气象站是一种综合型的气象设备&#xff0c;精巧而全面&#xff0c;满足人们对环境状况的深入了解和精准把握。 首先&#xff0c;超声波气象站的传感器部分&#xff0c;是它的核心组成部分&#xff0c;这位“感知者”…

Pinctrl子系统_03_Pinctrl子系统使用示例

本节演示&#xff0c;如何使用Pinctrl子系统配置I2C通信所使用的引脚&#xff0c;以IMX6ULL为例。 如下图所示&#xff0c;在芯片内部&#xff0c;有I2C模块。 怎么配置I2C模块&#xff1f; 答&#xff1a; 首先&#xff0c;要知道I2C模块会使用哪些引脚&#xff0c;这可以通…

鞋帽箱包经营配送小程序商城的作用是什么

鞋帽箱包是市场中主要经济体系之一&#xff0c;各地经营商家都非常多&#xff0c;随着互联网电商深入&#xff0c;近些年线下生意变得难做&#xff0c;无论获客转化流量&#xff0c;还是进一步增长拓展生意都变得非常困难&#xff0c;线上发展成为众多商家新选择。 如微信朋友…

合并不同年度收入数据-外连接

案例需求&#xff1a;统计2019年和2020年的客户销售收入并求和 思路&#xff1a;使用pandas读取excel数据横向连接&#xff0c;使用sum()含函数求和 代码如下&#xff1a; 1、使用pandas读取excel数据 2、由于两个表一个是"客户名称"&#xff0c;一个是客户描述,使…