python3.8.1+selenium实现登录滑块验证功能


Posted in Python onMay 22, 2020

python3.8.1+selenium解决登录滑块验证的问题,先给大家分享一个效果图,感觉不错,可以参考实现代码。

python3.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()

总结

到此这篇关于python3.8.1+selenium解决登录滑块验证的问题的文章就介绍到这了,更多相关python selenium 登录滑块验证内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python解析xml文件操作实例
Oct 05 Python
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
python异常和文件处理机制详解
Jul 19 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
在Python中COM口的调用方法
Jul 03 Python
python版百度语音识别功能
Jul 09 Python
django queryset 去重 .distinct()说明
May 19 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
python字符串常规操作大全
May 02 Python
在TensorFlow中实现矩阵维度扩展
May 22 #Python
Python多个装饰器的调用顺序实例解析
May 22 #Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 #Python
Tensorflow tf.tile()的用法实例分析
May 22 #Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 #Python
Tensorflow实现将标签变为one-hot形式
May 22 #Python
Python selenium爬取微博数据代码实例
May 22 #Python
You might like
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
使用python统计文件行数示例分享
2014/02/21 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
详解python内置模块urllib
2020/09/09 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
台湾生鲜宅配:大口市集
2017/10/14 全球购物
幼儿园国庆节活动方案
2014/02/01 职场文书
自主招生学校推荐信
2014/09/26 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
大学学生个人总结
2015/02/15 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers