python+selenium 破解滑动验证案列

本文介绍了如何利用Python和Selenium库解决滑动验证问题。通过分析滑块和背景图,计算滑动距离,并使用自定义的slideVerification模块来模拟滑动。博主分享了一段代码,展示了从获取验证码图片到计算滑动距离再到模拟滑动的完整过程,适用于类似QQ邮箱的滑动验证场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 之前在破解滑动验证的路上坎坎坷坷一直为图像识别感到烦恼,今在b站上看到一位博主的教课感觉非常有感悟,直接封装了一个方法处理滑动图像的识别,妙!

能点击进来的估计对滑动验证码应该不陌生,这里就不说废话了,直接上教程 ,这里以QQ邮箱为例:

 

 步骤:

1.分析缺块图和背景图,思路是这里有两个坐标,需要计算的距离是 b-a的横坐标即可 这就是我们需要滑动的距离

首先电脑下载一个picpick 打开里面的像素尺子,测一下a ,b 的距离

2.下载缺块图和背景图,直接丢给模块slideVerfication 处理 这里会返回一个需要滑动的距离

3.拖动滑块完成验证

代码如下,代码介绍很清晰

from selenium import webdriver
from slideVerfication import SlideVerificationCode
from time import sleep

# 打开浏览器
driver = webdriver.Chrome()
driver.implicitly_wait(10)

# 访问qq邮箱登录页面
driver.get(url="https://mail.qq.com/")

# 切换到登录iframe
iframe = driver.find_element_by_xpath('//*[@id="login_frame"]')

driver.switch_to.frame(iframe)
# 输入账号,密码
driver.find_element_by_xpath('//input[@class="inputstyle"]').send_keys('1871564623')  # 随便打的一个qq 不会影响实验
driver.find_element_by_xpath('//input[@type="password"]').send_keys('123456')
# 点击登录按钮
sleep(1)
driver.find_element_by_xpath('//*[@id="login_button"]').click()

# 创建一个滑动验证的对象
s = SlideVerificationCode()

# 切换到验证码所在的iframe
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="tcaptcha_iframe"]'))
# 定位滑块图片
slider_ele = driver.find_element_by_xpath('//*[@id="slideBlock"]')
# 定位验证码背景图
background_ele = driver.find_element_by_xpath('//img[@id="slideBg"]')

distance = s.get_element_slide_distance(slider_ele, background_ele)

print("滑动的距离为:", distance)

distance = distance * 280 / 680 - 31  # 认真观察背景图,发现下载的图片要大一些,因为这个图片有缩放,所以按照比例
# 6.3模拟滑动鼠标
btn = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')
s.slide_verification(driver, btn, distance)
sleep(10)
driver.close()

最后 需要模块的朋友可以加这位老师领取!,私聊我发给你也行

 

Python配合Selenium做滑块验证码自动验证的基本流程是这样的: 1. **安装依赖**: 首先,确保已经安装了`selenium`库,可以通过命令行执行 `pip install selenium` 完成安装。此外,还需要相应的浏览器驱动,例如Chromedriver或FirefoxDriver,根据你的浏览器类型选择合适的。 2. **启动浏览器**: 在Python脚本中初始化Selenium,创建一个`webdriver.Chrome()`或`webdriver.Firefox()`实例。为了不显示实际的浏览器窗口,可以设置`options`参数,如 `options.headless=True`。 ```python from selenium import webdriver # 后续加上对应浏览器的选项 options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--disable-gpu') driver = webdriver.Chrome(options=options) ``` 3. **导航到登录页面**: 使用`get`方法加载目标登录页面URL。 ```python login_url = "https://your-website.com/login" driver.get(login_url) ``` 4. **找到滑块元素**: 使用`find_element_by_*`方法定位滑块元素,如`find_element_by_id('captcha')`或`find_element_by_xpath('//img[contains(@class, "captcha")]')`等。这里假设滑块是一个图像元素。 ```python captcha_elem = driver.find_element_by_id('captcha') ``` 5. **截取并处理滑块图片**: 用`screenshot_as_png`方法截图滑块,然后使用OpenCV或PIL库对图片进行预处理,包括灰度化、二值化等操作,以便后续的字符识别。 ```python import cv2 import numpy as np # 获取滑块图片 captcha_image = captcha_elem.screenshot_as_png # 读取图片 img = np.array(Image.open(BytesIO(captcha_image))) # 对图片进行预处理 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) ``` 6. **字符识别**: 可能需要借助OCR(Optical Character Recognition)工具,如`tesseract`,将预处理后的图像转为文本。注意这步需要正确配置`tesseract`。 ```python from pytesseract import image_to_string text = image_to_string(binary, lang='eng', config='--psm 11') # psm 11表示去除干扰线 ``` 7. **模拟滑动验证**: 根据识别出的文字,计算滑动条的位置并模拟鼠标移动。由于这是一个抽象的概念,具体实现取决于滑块验证码的具体形式。 8. **提交表单**: 输入滑块验证码之后,找到提交按钮或者其他验证通过的信号元素,如点击事件。 ```python captcha_input_field = driver.find_element_by_id('captcha_input') # 假设有一个input元素接受验证码 captcha_input_field.send_keys(text) submit_button = driver.find_element_by_css_selector('#submit-button') submit_button.click() ``` 9. **等待验证完成**: 验证完成后,可能需要等待一段时间让滑块验证完成,例如使用`time.sleep()`。 10. **检查登录状态**: 检查登录后的行为或页面内容确认是否登录成功。 11. **关闭浏览器**: 最后,别忘了关闭浏览器会话。 ```python driver.quit() ``` 请注意,滑块验证码的实现往往非常复杂,尤其当涉及到动态加载或实时更新时,上述过程可能不够准确。实际项目中可能需要更精细的处理和错误处理。另外,遵循网站的robots.txt规则以及尊重其反爬虫策略是非常重要的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值