滑动验证码-移动滑块
1.Scrapy_ImagePipeline保存图片2.Scrapy 保存数据案例-小说保存3.Scrapy 中 CrawlSpider 使用(一)4.Scrapy 中 CrawlSpider 使用(二)5.Scrapy 中 Request 的使用6.Scrapy_Request对象meta演示7.Scrapy_Request对象dont_filter演示8.Scrapy_Request对象Cookie的演示9.Scrapy_FormRequest对象的使用10.Scrapy中下载中间件11.Scrapy_下载中间件设置UserAgent12.Scrapy 中 Downloader 设置代理13.下载中间件实战-Scrapy与Selenium结合14.MongoDB介绍15.Mongo_如果快速学习Mongo16.Windows安装与启动MongoDB17.MongoDB通过配置文件管理参数18.Linux安装MongoDB19.什么是Docker20.为什么要使用Docker21.Docker核心概念22.Docker安装23.Docker核心命令_镜像命令24.Docker核心命令_容器命令25.Docker核心命令_其他命令26.Docker 安装 MongoDB27.MongoDB基础命令28.MongoDB数据的增加29.MongoDB数据的更新30.MongoDB删除文档31.MongoDB数据的查询32.Docker数据管理_为什么使用数据卷33.Docker数据管理_配置数据卷34.Docker数据管理_数据卷容器35.Docker实战_Mysql数据卷挂载36.MongoDB聚合操作之分组、过滤37.MongoDB聚合操作之排序、分页38.MongoDB索引Index39.Mongo中唯一索引\复合索引40.mongodb和python交互41.Splash反爬42.Dockerfile完全指南_什么是Dockerfile43.Dockerfile完全指南_构建镜像44.Dockerfile完全指南_常见的13种指令上45.Docker网络管理_Docker0网络详解46.Docker网络管理_四种网络模式47.Docker网络管理_自定义网络48.Scrapy保存数据到多个数据库49.Splash与requests结合50.Splash与Scrapy结合51.图片验证码介绍52.验证码-手动输入53.超级鹰识别验证码54.移动端爬虫55.移动端工具的安装56.模拟器配置57.Appium介绍58.Appium环境搭建 - Android SDK安装59.Appium环境搭建 - Appium安装60.appium实战61.滑动验证码-保存图片62.滑动验证码-获取滑动长度63.滑动验证码-编辑移动轨迹
64.滑动验证码-移动滑块
65.LOL皮肤66.Python调用 JS -PyExecJS, Python 调用 JS -js2py滑动验证码-移动滑块
思路:
- 获取滑块
- 建立动作
- 根据滑动的速度滑动
from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver from selenium.webdriver.common.by import By from fake_useragent import UserAgent import requests from time import sleep headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'} import cv2 def get_long(): # 导入图片 img1 = cv2.imread('./imgs/cpt1.png') img2 = cv2.imread('./imgs/cpt2.png') # 边缘化图片 canny1 = cv2.Canny(img1,300,800) canny2 = cv2.Canny(img2,250,500) # 保存图片 cv2.imwrite('./imgs/tcpt1.png',canny1) cv2.imwrite('./imgs/tcpt2.png',canny2) # 加载要匹配的图片 big = cv2.imread('./imgs/tcpt1.png') small = cv2.imread('./imgs/tcpt2.png') # 匹配图片 rs = cv2.matchTemplate(big,small,cv2.TM_CCORR_NORMED) # 显示结果统计 min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(rs) return max_loc[0]/big.shape[1]*340 def get_track(distance): track = [] # 从什么地方开始滑动 current = 0 # 减速的阈值 mid = distance*4/5 # 时间 t = 0.2 # 速度 v = 0 while current < distance: if current <mid: a = 2 else: a = -3 v0 = v v = v0 + a*t move = v0*t + 1/2*a*t*t track.append(round(move))#加入移动轨迹 current += move #记录当前位置 track.append(distance - sum(track)) return track,sum(track) def get_img(): # 创建驱动服务: s = Service('./chromedriver.exe') # 创建chrome浏览器 driver = webdriver.Chrome(service = s) # 访问指定网站 driver.get('https://www.ssssssssss.com/chn/sc/waybill/waybill-detail/xxxxxx') # 设置全局等待对象 wait = WebDriverWait(driver,100) # 设置等待iframe加载完成 wait.until(EC.presence_of_all_elements_located((By.XPATH,"//iframe[@id='tcaptcha_iframe']"))) # 切换到frame driver.switch_to.frame("tcaptcha_iframe") sleep(3) # 获取图片src wait.until(EC.presence_of_all_elements_located((By.XPATH,"//div[@id='slideBgWrap']/img"))) img = driver.find_element(By.XPATH,"//div[@id='slideBgWrap']/img") img_src = img.get_attribute('src') img_src = img_src[:img_src.rfind('&')-1] print(img_src) # 保存图片 save_image(f'{img_src}1','cpt1.png') save_image(f'{img_src}2','cpt2.png') # 滑动验证, # 获取滑动的距离 distance = get_long() # 获取滑动的轨迹 track,long = get_track(distance) # 操作selenium滑动滑块 # 点击滑块 button = driver.find_element(By.XPATH,"//div[@id='tcaptcha_drag_thumb']") webdriver.ActionChains(driver).click_and_hold(button).perform() # 进行拖拽 for t in track: # 开始拖拽 webdriver.ActionChains(driver).move_by_offset(xoffset=t,yoffset=0).perform() # 释放拖拽 webdriver.ActionChains(driver).release().perform() driver.close() def save_image(url,file_name): resp = requests.get(url,headers=headers) with open(f'./imgs/{file_name}','wb') as f: f.write(resp.content) if __name__ == '__main__': get_img()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库