Python2.7结合Selenium2实现淘宝滑块自动验证
本文介绍如何使用Python2.7和Selenium2实现淘宝滑块自动验证功能。通过定位滑块元素、模拟拖动操作及判断验证结果,自动处理无响应和失败情况,直至验证成功。
本文分享了利用Python2.7与Selenium2实现淘宝滑块自动验证的具体代码,供读者参考。
1. 编译环境
操作系统为Win7,编程语言采用Python2.7配合Selenium2,集成开发环境为PyCharm,测试浏览器包括IE10和Chrome。
2.1 意外发现
今日登录淘宝时忘记密码,选择找回密码过程中发现平台新增了滑块验证机制。

鉴于本人正在学习Selenium,便尝试实现自动拖动滑块的功能。
2.2 资料查阅
由于缺乏思路,首先通过搜索引擎查找相关资料,找到一篇使用C#实现该功能的文章。该文章指出需定位滑块在网页及桌面的坐标,而Selenium的元素查找接口可直接完成此任务,剩余问题在于如何确定滑块的位移量(文章名称已遗忘)。
2.3 初步试验
手动操作滑块时,若位移不足,滑块会自动还原且无法触发认证成功。因此,先通过手动操作进行初步测试。打开浏览器并按F12查看代码,结果如下:

拖动滑块时,发现滑块元素的style属性持续变化,如图所示:

大致确定右位移量为300px,随后开始编写代码。经过多次试验,确定滑块移动后会出现以下三种情况:
1. 无响应:请按住滑块,拖到最右边; 2. 失败:哎呀,加载失败了,请点击刷新页面 3. 成功:请点击图中xx字,请在下方输入xx字
解决思路:若显示无响应,需重复拖动滑块直至成功;若显示失败,则自动点击刷新按钮使滑块重置为无响应状态;若显示成功,目前直接退出浏览器,验证码识别功能尚在研究中,后续将补充完善。
2.4 完整代码
注:粘贴的代码可能因格式问题导致对齐错误,直接复制运行可能会报错,请自行调整格式。
# 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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也欢迎大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









