Python3.8.1结合Selenium实现QQ邮箱滑块验证自动化

听雨眠
听雨眠
发布时间:2026-10-13| 4人浏览过
原创

本文介绍使用Python 3.8.1与Selenium 3.141.0实现QQ邮箱登录滑块验证的自动化脚本。通过模拟人类移动轨迹,利用ActionChains控制滑块拖动,解决常见的人机验证问题。文章包含完整代码示例及关键参数说明,适用于同类滑块验证场景的参考与实现。

Python3.8.1结合Selenium实现QQ邮箱滑块验证自动化

利用Python 3.8.1配合Selenium库,可以有效解决登录页面中的滑块验证难题。下文将展示具体的实现效果,读者可参考后续代码进行实际操作。

示例中选取的是QQ邮箱的滑块验证界面,具体形态如图所示。该案例可作为处理类似滑块验证机制的参考标准。

核心代码实现与轨迹模拟


"""
auther = "zwb",这里使用的python版本是3.8.1,selenium版本是3.141.0,webdriver是谷歌,版本是81.0.4044.138(正式版本) (64 位)
webdriver各版本对应的浏览器下载地址:https://npm.taobao.org/mirrors/chromedriver,这个脚本是以qq邮箱登录为例
"""
import unittest
from selenium import webdriver
from time import *
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
def get_track(distance):
 track = []
 current = 0
 mid = distance * 3 / 4
 t = 0.2
 v = 0
 while current < distance: # 定义循环条件,如果为真则继续,为假则不继续
 if current < mid: # 正常的if...else结构
 a = 2 # 定义加速度
 else:
 a = -3
 v0 = v
 v = v0 + a * t # 定义移动速度,哈哈哈,v = v0+at
 move = v0 * t + 1 / 2 * a * t * t # 定义每次滑块移动的距离,也是如此.s=v0t+1/2at**2,hahha,写这个的是高手,活学活用
 current += move # 每次遍历得到的move用current保存起来
 track.append(round(move)) # 将得到的move取整添加的列表中,每次都添加到列表尾部,可以用extend多次添加和insert添加到自己想要的位置
 return track # 返回每次移动的轨迹列表
class testUiProject(unittest.TestCase):
 def setUp(self):
 self.driver = webdriver.Chrome() # 定义驱动器
 self.url = "https://mail.qq.com/" # 定义需要访问的地址url
 self.driver.implicitly_wait(30) # 设置隐式等待时间
 self.driver.set_script_timeout(45) # 设置异步脚本加载超时时间
 self.driver.set_page_load_timeout(45) # 设置页面加载超时时间
 self.driver.maximize_window() # 设置页面窗口最大化
 def test_First_Case(self):
 global iframe, start_position # 函数内部定义全局变量
 driver = self.driver # 定义浏览器驱动
 driver.get(self.url) # 得到url打开网站
 username = "qq邮箱账号" # 定义用户账户
 password ="qq密码" # 定义用户密码
 driver.switch_to.frame("login_frame") # 打开网页后,查看是否有iframe标签,如果有则需要跳转到该标签后进行定位,这里使用id定位
 self.driver.find_element_by_xpath("//*[@id='u']").send_keys(username) # 传入用户账号
 self.driver.find_element_by_xpath("//*[@id='p']").send_keys(password) # 传入用户密码
 self.driver.find_element_by_id("login_button").click() # 点击登录按钮
 sleep(2) # 等待资源加载
 # driver.switch_to.default_content() 切换到顶层标签,如果之前的iframe标签和现在iframe标签不一致则需要切换,否则不需要
 # driver.switch_to.frame("tcaptcha_iframe")
 WebDriverWait(driver, 5, 0.5).until(
 EC.presence_of_element_located((By.ID, "tcaptcha_drag_thumb")) # 等待图片加载出来
 )
 try:
 start_position = driver.find_element_by_id("tcaptcha_drag_thumb") # 得到滑块的初始位置,并进行异常处理
 except Exception as e:
 print("get button failed: ", e)
 sleep(2) # 等待资源加载
 distance = 300 # 这里根据qq邮箱的初始窗口大小得到的宽度取值
 while 1:
 action = ActionChains(driver) # 定义ActionChains
 action.click_and_hold(start_position).perform() # 点击初始滑块位置并保持不释放
 action.reset_actions() # 清除之前的action
 track = get_track(distance) # 调用移动轨迹函数并传入距离distance,distance根据定位的滑块窗口大小自己设定
 for i in track: # 利用循环模拟滑块移动轨迹,xoffset是横向移动,yoffset是纵向移动,这里不纵向移动,所以yoffset=0
 action.move_by_offset(xoffset=i, yoffset=0).perform()
 action.reset_actions() # 清除之前的action
 sleep(0.5)
 # action.release().perform() 释放鼠标保持点击状态,这句话可以根据需要保留,目前这里不需要保留,保留会使得循环提前终止
 sleep(5)
 def tearDown(self):
 self.driver.quit()
if __name__ == "__main__":
 unittest.main()

核心逻辑总结

以上就是关于使用Python 3.8.1与Selenium解决登录滑块验证的详细教程。如需了解更多相关技术内容,建议查阅本站过往文章或继续浏览后续章节。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。