python2.7+selenium2实现淘宝滑块自动认证功能


Posted in Python onFebruary 24, 2018

本文为大家分享了python2.7+selenium2实现淘宝滑块自动认证的具体代码,供大家参考,具体内容如下

1.编译环境

操作系统:win7;语言:python2.7+selenium2;ide:pycharm;浏览器:IE10,chrome

2.1意外开始

今天登录淘宝时候发现吧密码搞忘了,选择找回密码时淘宝居然加了滑块认证。

python2.7+selenium2实现淘宝滑块自动认证功能

恰巧自己也在学习selenium,就想试一试能不能实现自动拖动滑块。

2.2 度娘查找

由于自己没多少思路,第一选择就是问度娘,终于找到一篇文章,该文章使用C#实现了该功能,并提到需要定位滑块元素在网页和桌面的坐标,而这个功能直接可以用selenium中的查找元素接口搞定那么剩下最后一个问题就是如何得知滑块的位移量。(原谅我忘记该文章的名字了)

2.3 开始试验

大家在手动操作滑块的时候会发现如果滑块位移不够,它要自动还原就不能触发认证成功环节,所以我用一个笨方法先手动操作看看。打开浏览器按F12,得到代码如下:

python2.7+selenium2实现淘宝滑块自动认证功能

然后拖动滑块位移,发现滑块元素的style一直在变化如图:

python2.7+selenium2实现淘宝滑块自动认证功能

现在大概清楚右位移量为300px,OK开始写代码,经过很多次试验确定滑块移动后有三种情况:

1无响应:请按住滑块,拖到到最右边;
2失败:哎呀,加载失败了,请点击刷新页面
3成功:请点击图中xx字,请在下方输入xx字

解决思路:无响应时,需要重复拖动滑块,直到成功为止;失败了,需要自动点击刷新按钮,使滑块回到无响应状态;成功了,暂时是直接退出浏览器,验证码识别还在研究中,以后补齐。

2.4 完整代码

PS:粘贴上去的代码,我不知道怎么对齐,如果大家直接复制运行,可能会报错,请自动修改。

# encoding=utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
#使用谷歌浏览器,方便查看效果,如果追求速度可以用phantomJS
driver=webdriver.Chrome()
#调整最大窗口,否则某些元素无法显示
driver.maximize_window()
#使用淘宝找回密码界面做测试
driver.get('https://passport.taobao.com/ac/password_find.htm?spm=a2107.1.0.0.phBxhD&from_site=0')
time.sleep(5)#等待滑动模块和其他JS文件加载完毕!
while True:
  try:
  #定位滑块元素
    source=driver.find_element_by_xpath("//*[@id='nc_1_n1z']") 
  #定义鼠标拖放动作
            ActionChains(driver).drag_and_drop_by_offset(source,400,0).perform()
    #等待JS认证运行,如果不等待容易报错
    time.sleep(2)
    #查看是否认证成功,获取text值
  text=driver.find_element_by_xpath("//div[@id='nc_1__scale_text']/span")
    #目前只碰到3种情况:成功(请在在下方输入验证码,请点击图);无响应(请按住滑块拖动);失败(哎呀,失败了,请刷新)
    if text.text.startswith(u'请在下方'):
      print('成功滑动')
      break
    if text.text.startswith(u'请点击'):
      print('成功滑动')
      break
    if text.text.startswith(u'请按住'):
      continue
  except Exception as e:
  #这里定位失败后的刷新按钮,重新加载滑块模块
  driver.find_element_by_xpath("//div[@id='havana_nco']/div/span/a").click()
    print(e) 
#退出浏览器,如果浏览器打开多个窗口,可以使用driver.close()关闭当前窗口而不是关闭浏览器
driver.quit()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
对于Python的Django框架部署的一些建议
Apr 09 Python
python操作redis的方法
Jul 07 Python
python搭建微信公众平台
Feb 09 Python
python学习教程之使用py2exe打包
Sep 24 Python
Python使用MD5加密算法对字符串进行加密操作示例
Mar 30 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
python元组的概念知识点
Nov 19 Python
python 使用shutil复制图片的例子
Dec 13 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 Python
Python 中Pickle库的使用详解
Feb 24 #Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 #Python
python3+mysql查询数据并通过邮件群发excel附件
Feb 24 #Python
Python3实现带附件的定时发送邮件功能
Dec 22 #Python
python正则实现提取电话功能
Feb 24 #Python
python3实现公众号每日定时发送日报和图片
Feb 24 #Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 #Python
You might like
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
PHP中phar包的使用教程
2017/06/14 PHP
php实现图片压缩处理
2020/09/09 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
Angular的$http与$location
2016/12/26 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
python编写分类决策树的代码
2017/12/21 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
会计专业自荐信
2014/06/03 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
单独二胎证明
2015/06/24 职场文书
大学军训通讯稿
2015/07/18 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
2016年安全月活动总结
2016/04/06 职场文书
golang中的空slice案例
2021/04/27 Golang
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL