致谢:

Charles未晞

Charles的皮卡丘

提供解决思路,此文实为借鉴。

前言:

利用selenium模拟登录淘宝,外界传言这个确实很难过,有各种轨迹检测。

但是我没想到淘宝的滑块验证码这么容易就能过。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

开发工具

Python版本:3.6.4

相关模块:

selenium模块;

python内置模块。

Chromedriver:

自行谷歌,下载和电脑上的谷歌浏览器版本相匹配的驱动。

selenium模块本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器;由于selenium解析执行了CSS、JavaScript所以相对requests它的性能是低下的;

1.安装selenium

pip install selenium

先实例化一个webdriver.Chrome对象,用于自动化操作我们电脑里的谷歌浏览器:

browser = webdriver.Chrome(executable_path=chromedriverpath)

模拟点击网页左上方的"亲,请登录"以进入淘宝网的登录界面:

然后跳转到下面的界面:

刚开始居然是没有出现验证码的,是我多次试错后调试出来的。

模拟输入账户信息:

# 输入用户名密码
username_sender = driver_wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="fm-login-id"]')))
username_sender.send_keys(username)
password_sender = driver_wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="fm-login-password"]')))
password_sender.send_keys(password)

这类滑块验证码需要用户按住滑块,并将它拖动到最右边。一开始我也以为淘宝会加入一些检测手段以识别是机器还是人在操作滑块。结果发现和外界传闻的不一样,用ActionChains函数直接把滑块拖到最右边就可以验证通过了:

try:  
slider = browser.find_element_by_xpath("//span[contains(@class, 'btn_slide')]")
if slider.is_displayed():
ActionChains(browser).click_and_hold(on_element=slider).perform()
ActionChains(browser).move_by_offset(xoffset=258, yoffset=0).perform()
ActionChains(browser).pause(0.5).release().perform()
except:
pass

最后模拟点击一下登录按钮就行了:

# 点击登录按钮
button = driver_wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="login-form"]/div[4]/button')))
button.click()

程序到这里就大功告成了,有些人就很奇怪了,为什么这么简单就可以真的实现过验证呢?其实吧就总结了一句话:纸上得来终觉浅,绝知此事要躬行!

最新文章

  1. java利用JDK调用并执行js源码
  2. 半吊子学习Swift--天气预报程序-准备工作
  3. shell中括号的使用
  4. S2结业考试的第一次测验
  5. Chinese culture
  6. Mono for Android (2)-- Android应用程序初认识
  7. FM算法
  8. JVM内存结构之一--总体介绍
  9. PYTHON多进程样码
  10. SharePoint solution and feature management with PowerShell
  11. Axure滚动效果实现
  12. [课程分享]IT软件项目管理(企业项目甘特如是评价、维护管理、文档管理、风险管理、人力资源管理)
  13. Ubuntu14.04 设置wifi热点
  14. Aidl跨进程通信机制-android学习之旅(87)
  15. 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题
  16. 【EMV L2】GPO响应以及AIP、AFL
  17. python3+selenium框架设计10-发送邮件
  18. MJExtension代码解释
  19. 如何让移植的嵌入式ARM显示中文汉字
  20. 【转】RTMP/RTP/RTSP/RTCP协议对比与区别介绍

热门文章

  1. 数据可视化实例(十): 相关图(matplotlib,pandas)
  2. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super
  3. 从JIT到类加载再到实现原理解式Lambda编译慢的问题
  4. 基于SSM框架的简单问答社区
  5. It is indirectly referenced from required .class files错误查找的解决办法如下
  6. Ethical Hacking - GAINING ACCESS(11)
  7. kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载
  8. Python中ftplib模块的使用
  9. 题解 SP687 【REPEATS - Repeats】
  10. 题解 洛谷 P3521 【[POI2011]ROT-Tree Rotations】