【网络爬虫篇】逆向实战—某东:滑块验证码(逆向登录)2024.8.7最新发布,包干货,包详细
【网络爬虫篇】更多优秀文章借鉴:
1. 使用Selenium实现黑马头条滑块自动登录
2. 使用多线程采集爬取豆瓣top250电影榜
3. 使用Scrapy爬取去哪儿网游记数据
4. 数据采集技术综合项目实战1:国家水稻网数据采集与分析
5. 数据采集技术综合项目实战2:某东苹果15数据采集与分析
6. 数据采集技术综合案例实战3:b站弹幕采集与分析
7. 逆向实战—京东:滑块验证码(逆向登录)
导航小助手
项目介绍及需求:
实现步骤
结果展示
项目介绍及需求:
本项目主要是针对“逆向实战—京东:滑块验证码(逆向登录)”。1.通过Selenium与selector、Xpath交互自动化地寻找滑块拼接所需要的元素。2.针对特定元素使用pyautogui模拟鼠标的人为操作。3.当滑块验证码登录成功后,将用户的成功登录的cookie保存到本地的txt文件;在用户爬取京东相关特定的数据时,只需要将记载着用户的cookie的txt文件进行读入,即可避免浏览器的用户验证行为。
实现步骤
1. 首先导入相关库,解决我们的相关需求
import base64 # 用于处理 Base64 编码的图像。
import cv2 # OpenCV,用于图像处理和模式识别,这里主要用于识别滑块验证码的位置。
from selenium import webdriver # 从selenium库中引入webdriver模块,用于控制浏览器的自动化操作。
from selenium.webdriver.common.by import By # 引入selenium中的By类,它提供了查找网页元素的不同策略,如通过CSS选择器、ID、类名等。
from selenium.webdriver.support.ui import WebDriverWait # 用于等待页面上的元素出现,这在处理动态网页时非常重要。
from selenium.webdriver.support import expected_conditions as EC # 用于检查元素是否出现在DOM中。
import time # 降低访问频率
import pyautogui # 用于模拟鼠标和键盘操作,这里用于处理滑块验证码的拖动操作。
2.在自定义的login()函数中,使用Selenium的内置参数元素的selector定位滑块验证码的相关元素
driver = webdriver.Firefox()
driver.get('https://www.jd.com/')
# 最大化浏览器窗口,确保自动化操作不会因为窗口大小问题而失败。
driver.maximize_window()
# driver.execute_script('document.body.style.zoom="0.8"')
# 在京东主页面找到登录按钮,进入登录页面
driver.find_element(by=By.CSS_SELECTOR, value='#ttbar-login > a.link-login > span.style-red').click()# 输入自己的手机号码
driver.find_element(by=By.CSS_SELECTOR, value='#loginname').send_keys("xxx")
# 输入自己的密码
driver.find_element(by=By.CSS_SELECTOR, value='#nloginpwd').send_keys("xxx")# 定位并点击确认按钮
driver.find_element(by=By.CSS_SELECTOR, value='#formlogin > div.item.item-fore5').click()# 休息3秒,等待滑块验证码的加载
time.sleep(3)
3.在自定义的login()函数中,使用一个死循环,跳出循环的条件为用户滑块验证成功,否则不断重复定位图片、写入图片、查找距离操作。
# 设置循环,当滑块验证失败时,不断重新获取滑块验证码并再次进行滑动验证while True:try:big = driver.find_element(by=By.XPATH, value='//div[@class="JDJRV-bigimg"]/img')small = driver.find_element(by=By.XPATH, value='//div[@class="JDJRV-smallimg"]/img')# 使用get_attribute方法获取背景图像的src属性值,并去除前22个字符,因为它们通常包含data: image / png;base64, 这样的前缀。big = big.get_attribute('src')[22:]small = small.get_attribute('src')[22:]# base64.b64decode(big):这个函数用于解码Base64编码的字符串。Base64是一种用于将二进制数据转换为可打印字符的编码方式,with open('./pictures/slidepicture.png', mode='wb') as f:f.write(base64.b64decode(big))with open('./pictures/background.png', mode='wb') as f:f.write(base64.b64decode(small))# 调用FindPic拖动滑块拼接函数,识别滑块的位置。res = FindPic()
4.在自定义的滑块拼接距离FindPic()函数中,使用OpenCV中的相关图像匹配方法,匹配滑块与滑块背景图片的缺口关系,找到一个从滑块左上端到滑块背景最大值和最小值的距离,这里我取的是最小值。
def FindPic(target='./pictures/slidepicture.png', template='./pictures/background.png'):# 使用cv2.imread方法读取目标图像,并将其转换为灰度图像。# 灰度模式意味着图像只包含亮度信息,没有颜色信息,因此每个像素点只有一个灰度值。target_rgb = cv2.imread(target, 0)print(target_rgb.shape)template_rgb = cv2.imread(template,0)'''执行模板匹配后,返回的结果是一个二维浮点数组,该数组的大小与输入的目标图像相同,但包含的是匹配系数而不是图像像素值。通过分析这个结果图,可以找到模板图像在目标图像中的最佳匹配位置。'''# 使用cv2.matchTemplate方法在目标图像中搜索模板图像,使用cv2.TM_CCOEFF_NORMED方法进行匹配。res = cv2.matchTemplate(target_rgb, template_rgb, cv2.TM_CCOEFF_NORMED)# 在给定的数组或图像res中找到最小值和最大值及其位置。value = cv2.minMaxLoc(res)return value[2][0]
5. 在自定义的login()函数的while循环中计算滑块应该滑动的距离。由于计算滑块需要拖动的距离,由于图片的真实宽度为360,而展示的图片宽度为242,且在我的电脑中屏幕是以125%的显示,125/100=1.25。所以真实的滑动距离应该为res = res * 242 * 1.25 // 360;定位小滑块元素。
# 计算滑块需要拖动的距离,由于图片的真实宽度为360,而展示的图片宽度为242,且res = res * 242 * 1.25 // 360print("本次应该滑动滑块的距离为:", res)
# 使用WebDriverWait和presence_of_element_located等待滑块元素出现,并将其保存在slider变量中。slider = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#JDJRV-wrap-loginsubmit > div > div > div > div.JDJRV-img-panel.JDJRV-click-bind-suspend > div.JDJRV-img-wrap > div.JDJRV-smallimg > img')))
6.当然,有的小伙伴此时会想为什么不用Selenium自带的模拟滑动操作,在经过实验后发现通过Selenium滑动滑块操作是不被京东所认可的,结果小伙伴们可以自己实验。
'''使用Selenium自带的模拟拉动滑块操作1. action = ActionChains(driver)2. action.click_and_hold(slider).move_by_offset(res,0).release().perform()'''
7.获取小滑块在浏览器上的在xy轴的坐标位置,并使用pyautogui的相关操作拉动滑块;而这里有个问题,即认为需要的滑块位置与实际获得的滑块位置。
获取小滑块在网页上的位置lo = slider.location# 计算鼠标需要移动到的x坐标位置,这里可能涉及到滑块和网页元素的比例和位置关系。x = int(lo.get('x')*1.25) + 20 # 小滑块在浏览器上的 x 距离y = int(lo.get('y')*1.25) + 125 # 小滑块在浏览器上的 y 距离
8. 利用pyautogui对小滑块进行滑动“漂移”操作,登录成功即将用户cookie写入txt文件。
'''# 使小滑块进行飘移操作1. duration=0.2 指定了鼠标移动到目标位置所需的时间,单位是秒。2. 先故意使得小滑块拉过头,再慢慢恢复计算出来的距离'''pyautogui.moveTo(x+res+15, y+6,duration = 0.2)pyautogui.moveTo(x+res-10, y-3,duration = 0.3)pyautogui.moveTo(x+res, y, duration = 0.3)pyautogui.mouseUp()# 未验证成功,休息5秒,等待下一次模拟登录time.sleep(5)# 若登录成功,则将本次登录成功的用户信息记录于txt文件中except:cookies = driver.get_cookies()cookie_string = "; ".join(f"{cookie['name']}={cookie['value']}" for cookie in cookies)break
结果展示
由上图信息可见,用户自动化登录成功~
注意:若需要全部源代码,请在后台私信博主~
创作不易,请点个赞哦~
还有更多优秀作品在博主主页~
相关文章:

【网络爬虫篇】逆向实战—某东:滑块验证码(逆向登录)2024.8.7最新发布,包干货,包详细
【网络爬虫篇】更多优秀文章借鉴: 1. 使用Selenium实现黑马头条滑块自动登录 2. 使用多线程采集爬取豆瓣top250电影榜 3. 使用Scrapy爬取去哪儿网游记数据 4. 数据采集技术综合项目实战1:国家水稻网数据采集与分析 5. 数据采集技术综合项目实战2&#x…...
为什么优质的酱香白酒都会带点苦味?
大家好,我是酱酒亮哥,不知大家有没有发现,在制作一杯美味的咖啡或是烘焙一块香脆的面包时,制作过程中都会有一些独特的味道和香气产生,对吧?同样地,酱香白酒的酿造过程也是一个复杂而精细的化学…...
软件测试常见面试题
软件测试阶段分为单元测试,集成测试,系统测试,验收测试。单元测试策略为对代码中的函数方法进行测试,目的是发现代码的问题。集成测试策略是模块中组合起来进行测试,要求发现与接口有关的问题。系统测试策略是子系统的…...

面试经典算法150题系列-接雨水
接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,…...

【C++】 类型转换深度探索:揭开类型转换的奥秘
🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 一: 🚀 C语言中的类型转换 二: 🔥 为什么C需要四种类型转换 三: 🔥 C强制类型转换 🥝 3.1 st…...
深入探索Webkit的Web Authentication API:安全与便捷的融合
Web Authentication API,通常被称为WebAuthn,是一个新兴的Web标准,旨在通过提供更安全、更便捷的认证方式来改善用户的在线体验。随着Webkit对WebAuthn的支持日益增强,本文将深入探讨这一API的功能、实现方式以及如何在Webkit浏览…...

Vue - 关于v-wave 波浪动画组件
Vue - 关于v-wave 波浪动画组件 这个动画库可以在标签中添加新的v-wave属性,来让点击标签元素后添加漂亮的波纹效果,并且可以根据父元素自动形成波纹的颜色,也可以自定义波纹颜色,持续时间,透明度,触发的对…...

计算机网络408考研 2019
计算机网络408考研2019年真题解析_哔哩哔哩_bilibili 2019 1 1 1 1...

实时捕捉与追溯:得物基于 eBPF 打造云上网络连接异常摄像头
近期我们容器 SRE 团队基于 eBPF 技术建设网络连接异常感知能力,灰度上线过程中发现了生产环境 10 以上的应用配置错误、程序 Bug 等问题。在和应用负责同学同步风险过程中,大家都挺好奇我们如何实现在对应用无侵入的情况下发现服务连接异常的。本篇文档…...
ubuntu14.04图形界面配置
Ubuntu系统启动,输入用户密码后,屏幕显示彩色背景,但是始终不能进入图形界面。 如果你也遇到过这种情况,可以参照以下方法解决(在 ubuntu14.04 验证)。 同时按下 alt ctrl F1,屏幕出现 tty1&a…...

51单片机-第八节-蜂鸣器
一、什么是蜂鸣器? 蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号。 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器: 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可…...

Windows命令查看WiFi密码
查看所有已保存的WiFi网络 (以管理员身份)输入以下命令 netsh wlan show profiles查看某个WiFi网络的密码 netsh wlan show profile name"你的网络名" keyclear在输出中,在关键内容(Key Content)字段下找…...

不同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ
ARM架构、X86架构、Window系统环境下RabbitMQ的安装 RabbitMQ安装1 Erlang语言介绍2 安装Erlang2.1 ARM架构的CentOS虚拟机中安装Erlang2.2 X86架构的CentOS虚拟机中安装Erlang2.3 Windows系统安装Erlang2.3.1 下载Erlang2.3.2 安装Erlang2.3.3 配置Erlang2.3.4 检测Erlang 3.安…...

C++(week16): C++提高:(六) Qt提高
文章目录 四、Qt的元对象系统1.元对象和MOC(1)自省 和 反射(2)Qt是怎样支持元对象系统的?(3)支持元对象系统的三个要求(4)元对象系统的功能(5)动态属性 2.信号和槽机制(1)信号与槽机制的基本原理(2)自定义信号、自定义槽函数①自定义信号②自定义槽③关联 connect (…...
go 时间转时间戳的时区设置问题
昨天遇到一个问题,在完成时间转换时间戳,在后续测试中发现转换后的时间戳转成时间后,时间发生错误,时间和转换时间不一致问题 如下: package mainimport ("fmt""time" )func main() {Start : &q…...
MySQL 常见日志清理策略
前言: MySQL 数据库服务器使用多种类型的日志来记录操作和事件,这对于故障诊断、审计和性能分析非常重要。然而,这些日志文件会随着时间的推移而不断增长,可能会占用大量的磁盘空间。因此,定期清理这些日志是必要的&a…...

3大管人绝招让你的手下心服口服
3大管人绝招让你的手下心服口服 一:差异化管理,玩弄人性 谁赞成,谁反对,看清楚谁顺从自己,谁反对自己之后,接下来要做的便是区别对待。 给听话的下属最好的资源、最轻松简单的工作、最高的待遇…...
useImperativeHandle 是什么?你可以理解为 vue3 的 expose
useImperativeHandle 确实类似于 Vue 3 的 expose,两者都用于控制子组件向父组件暴露的接口。 在 React 中,useImperativeHandle 需要与 forwardRef 一起使用,原因如下: 转发引用:forwardRef 允许父组件将 ref 传递给…...

《Techporters架构搭建》-Day05 属性校验
属性校验 前言Validated基础用法集合校验分组校验嵌套校验自定义校验器 源码地址 前言 在项目开发过程中,经常遇到需要对传递的参数进行校验,比如某个参数字段是否为空、值的取值是否在约定范围、格式是否合法等等,最原始的写法,…...

HTTP的场景实践
HTTP的场景实践:任选一个浏览器,对于其涉及的请求中的缓存策略展开具体分析 1. 强缓存: Cache-Control用于指定缓存的最长有效时间。 Expires用于指定资源过期的日期。 2. 协商缓存: ETag用于标识资源的唯一标识符,…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...