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

废话不多说直接开干!

在这里插入图片描述

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 Falsereturn True# 定义获取运动轨迹函数
def get_tracks(distance):"""v = v0+atx = v0t+1/2at**2"""# 定义存放运动轨迹的列表tracks = []# 定义初速度v = 0# 定义单位时间t = 0.5# 定义匀加速运动和匀减速运动的分界线mid = distance * 4/5# 定义当前位移current = 0# 为了一直移动,定义循环while current < distance:if mid > current:a = 2else:a = -3v0 = v# 计算位移x = v0 * t + 1/2*a*t**2# 计算滑块当前位移current += x# 计算末速度v = v0+a*ttracks.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 155ua_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').texttime = 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').textcontent = 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').textprint(status,time,content)driver.quit()breakexcept Exception:passprint('succ')

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Audio】正弦波生成原理及C++代码

正弦波生成及频谱分析 正弦波公式 诊断系统&#xff08;Diag&#xff09;会通过播放一段指定频率、采样率、时长及振幅的正弦音&#xff0c;以此对Audio测试。正弦波的公式如下&#xff0c;其中 A是振幅、x是时间、F是频率。 y A ∗ sin ⁡ ( 2 ∗ π ∗ x ∗ F ) y A* \s…

properties文件和yaml文件的区别~

之前&#xff0c;关于数据库的连接信息&#xff0c;端口号的设置等&#xff0c;我们会将它分门别类的写在多个文件中&#xff0c;但SpringBoot&#xff0c;它讲究统一的配置管理&#xff0c;我们想设置的任何参数都集中在一个固定位置和命名的配置文件&#xff0c;而该配置文件…

Allure-pytest功能特性介绍

前言 学pytest就不得不说fixture&#xff0c;fixture是pytest的精髓所在&#xff0c;就像unittest中的setup和teardown一样&#xff0c;如果不学fixture那么使用pytest和使用unittest是没什么区别的(个人理解)。 fixture用途 1.做测试前后的初始化设置&#xff0c;如测试数据准…

计算机竞赛 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于pyt…

国庆中秋宅家自省: Python在Excel中绘图尝鲜

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 【一】国庆中秋: 悟 【国…

Unity - 实践: Metallic流程贴图 转 Specular流程贴图

文章目录 目的Metallic Flow - SP - 输出输出的 MRA (MGA) 贴图 Metallic->Specular (根据教程一步一步实践)1. Base color Metallic -> Diffuse2. Base color Metallic -> Specular3. Roughness -> Glossiness输出贴图&#xff0c;在 unity 中展示&#xff1a;M…

【12】c++设计模式——>单例模式练习(任务队列)

属性&#xff1a; &#xff08;1&#xff09;存储任务的容器&#xff0c;这个容器可以选择使用STL中的队列&#xff08;queue) &#xff08;2&#xff09;互斥锁&#xff0c;多线程访问的时候用于保护任务队列中的数据 方法&#xff1a;主要是对任务队列中的任务进行操作 &…

蓝桥杯---第二讲---二分与前缀和

文章目录 前言Ⅰ. 数的范围0x00 算法思路0x00 代码书写 Ⅱ. 数的三次方根0x00 算法思路0x01代码书写 Ⅲ. 前缀和0x00 算法思路0x01 代码书写 Ⅳ. 子矩阵的和0x00 算法思路0x01 代码书写 Ⅴ. 机器人跳跃问题0x00 算法思路0x01 代码书写 Ⅵ. 四平方和0x00 算法思路0x01 代码书写 …

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

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

【Hello Linux】多路转接之 epoll

本篇博客介绍&#xff1a; 多路转接之epoll 多路转接之epoll 初识epollepoll相关系统调用epoll的工作原理epoll服务器编写成员变量构造函数 循环函数HandlerEvent函数epoll的优缺点 我们学习epoll分为四部分 快速理解部分概念 快速的看一下部分接口讲解epoll的工作原理手写epo…

GB28181学习(六)——实时视音频点播(数据传输部分)

GB28181系列文章&#xff1a; 总述&#xff1a;https://blog.csdn.net/www_dong/article/details/132515446 注册与注销&#xff1a;https://blog.csdn.net/www_dong/article/details/132654525 心跳保活&#xff1a;https://blog.csdn.net/www_dong/article/details/132796…

【SpringCloud】微服务技术栈入门3 - Gateway快速上手

目录 GatewayWebFlux网关基本配置过滤器与断言工厂全局过滤器跨域处理 CORS Gateway WebFlux gateway 基于 webflux 构建 WebFlux 是基于反应式流概念的响应式编程框架&#xff0c;用于构建异步非阻塞的 Web 应用程序。它支持响应式编程范式&#xff0c;并提供了一种响应式的方…

想要精通算法和SQL的成长之路 - 无重复字符的最长子串和滑动窗口最大值

想要精通算法和SQL的成长之路 - 无重复字符的最长子串 前言一. 无重复字符的最长子串二. 滑动窗口最大值2.1 滑动窗口的基本操作 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 无重复字符的最长子串 原题链接 思路如下&#xff1a; 用一个滑动窗口&#xff0c;该窗口区…

SpringBoot自带模板引擎Thymeleaf使用详解①

目录 前言 一、SpringBoot静态资源相关目录 二、变量输出 2.1 在templates目录下创建视图index.html 2.2 创建对应的Controller 2.3 在视图展示model中的值 三、操作字符串和时间 3.1 操作字符串 3.2 操作时间 前言 Thymeleaf是一款用于渲染XML/HTML5内容的模板引擎&am…

数据分析视角中的商业分析学习笔记

数据分析一大堆&#xff0c;结果却是大家早就知道的结论&#xff1f;是工具和方法出问题了吗&#xff1f;真正原因可能是你的思维有误区。 为什么分析的这么辛苦&#xff0c;得出的结论大家早知道&#xff0c;谁谁都不满意&#xff1f;核心原因有3个&#xff1a; 分析之前&am…

DataX和dataX-web 集群部署及使用

&#x1f4d1; DataX和dataX-web 集群部署及使用 一 . 安装前准备 DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 DataX 采用 框架 插件 的模式…

SpringBoot vue云办公系统

SpringBoot vue云办公系统 系统功能 云办公系统 登录 员工资料管理: 搜索员工 添加编辑删除员工 导入导出excel 薪资管理: 工资账套管理 添加编辑删除工资账套 员工账套设置 系统管理: 基础信息设置 部门管理 职位管理 职称管理 权限组管理 操作员管理 开发环境和技术 开发语…

网络准入 重定向,DNS劫持内网设备访问网站

环境&#xff1a;Nginx 问题&#xff1a; 1.某网络实施网络准入控制&#xff0c;需要劫持不受信网段的客户端 所有访问到指定引导页面 2.需要劫持PS4 用户访问任意网站&#xff0c;或用户指南 方式全自动破解 解决办法&#xff1a;搭建dnsmasq DNS服务器&#xff0c;全域名解析…

Spring MVC程序开发(JavaEE进阶系列3)

目录 前言&#xff1a; 1.什么是Spring MVC 1.1MVC的定义 1.2MVC和Spring MVC的关系 1.3为什么要学习Spring MVC 2.Spring MVC项目的创建 3.Spring MVC框架的使用 3.1连接的功能 3.1.1RequestMapping 3.1.2GetMapping 3.1.3PostMapping 3.2获取参数的功能 3.2.1获…

Error string: Could not load library

启动Rivz时&#xff0c;报错&#xff1a; Error string: Could not load library (Poco exception libg2o_csparse_extension.so.0.1: cannot open shared object file: No such file or directory) [ERROR] [1696572310.529059051]: Failed to load nodelet [/radar_graph_s…