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利用sklearn包编写决策树源代码
Dec 21 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
对python while循环和双重循环的实例详解
Aug 23 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
用python修改excel表某一列内容的操作方法
Jun 11 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
PHP的拦截器实例分析
2014/11/03 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
详解python中list的使用
2019/03/15 Python
python实现的汉诺塔算法示例
2019/10/23 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
大一学生假期实习的自我评价
2013/10/12 职场文书
高中生活自我鉴定
2014/01/18 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
求职自荐信怎么写
2014/03/06 职场文书
《故乡》教学反思
2014/04/10 职场文书
父母对孩子说的话
2014/04/12 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
2014年度安全工作总结
2014/12/04 职场文书
公司开会通知
2015/04/20 职场文书
孟佩杰观后感
2015/06/17 职场文书