2.3 滑块验证码

2.3 滑块验证码本节要讲解如下图所示的滑块验证码 更为复杂的滑动拼图验证码在 2 4 节介绍 这种验证码机制比较简单 将滑块拖动到滑轨的最右端即可完成验证 如下图所示 如果未将滑块拖动到滑轨的最右端 则无法通过验证 验证失败后滑块会回到起始位置 其中的关键是需要用 Selenium 库模拟鼠标拖动滑块滑动一定的距离 因为滑块的起始位置和滑轨的起始位置相同 所以滑块需要移动的距离等于滑轨的跨度减去滑块的宽度 下面就来利用开发者工具查看滑轨和滑块的宽度 在浏览器中打开本书配套代码文件中为滑块验证码搭建的本地网页文件

  • 本节要讲解如下图所示的滑块验证码(更为复杂的滑动拼图验证码在2.4节介绍)。这种验证码机制比较简单:将滑块拖动到滑轨的最右端即可完成验证,如下图所示。如果未将滑块拖动到滑轨的最右端,则无法通过验证,验证失败后滑块会回到起始位置。
    在这里插入图片描述

  • 其中的关键是需要用Selenium库模拟鼠标拖动滑块滑动一定的距离。因为滑块的起始位置和滑轨的起始位置相同,所以滑块需要移动的距离等于滑轨的跨度减去滑块的宽度。下面就来利用开发者工具查看滑轨和滑块的宽度。
  • 在浏览器中打开本书配套代码文件中为滑块验证码搭建的本地网页文件“index.html”,打开开发者工具,然后用元素选择按钮选中整个滑轨,此时的界面如下图所示。可以看到其中显示了滑轨的尺寸和颜色等属性。要查看滑轨的尺寸,有两种方法:图中箭头所示。
    在这里插入图片描述

  • 滑块宽度的查看方法和滑轨相同,用元素选择工具选中滑块,可以看到滑块的宽度。由此可知需要模拟滑动的距离为260像素。
    在这里插入图片描述

  • 下图开始编写代码。首先用Selenium库打开网页,代码如下:
from selenium import webdriver browser = webdriver.Chrome() url = r'D:\works\python_crawl1\《Python爬虫(进阶与进通)》代码汇总\2.验证码反爬\3.滑块验证码\index.html' browser.get(url) #用模拟浏览器打开网页 
  • 然后用Selenium定位滑块,代码如下:
huakuai = browser.find_element_by_xpath('//*[@id="code-box"]/span') 
  • 定位到滑块后,就可以准备拖动滑块了。在拖动过程中要保持鼠标为按下状态,不能过早松开鼠标,所以不能使用click()函数。Selenium库提供了一个ActionChains模块,其中的click_and_hold()函数可以使鼠标保持按下状态,release()函数可以松开鼠标,move_by_offset()函数可以使鼠标移动。结合使用这些函数即可将滑块拖动一定距离,代码如下:
action = webdriver.ActionChains(browser) # 启动动作链 action.click_and_hold(huakuai).perform() #按住滑块 action.move_by_offset(260,0) #移动滑块,其中的260是之前计算出来的需要滑动的距离 action.release().perform() #释放滑块 
  • 完整代码如下,其中还用time库的sleep()函数在模拟滑动前等待两秒,以便观察滑动效果。
from selenium import webdriver import time # 1.访问网址 browser = webdriver.Chrome() url = r'D:\works\python_crawl1\《Python爬虫(进阶与进通)》代码汇总\2.验证码反爬\3.滑块验证码\index.html' browser.get(url) #用模拟浏览器打开网页 # 2.定位滑块 huakuai = browser.find_element_by_xpath('//*[@id="code-box"]/span') # 3.开始滑动 action = webdriver.ActionChains(browser) # 启动动作链 action.click_and_hold(huakuai).perform() #按住滑块 time.sleep(2) action.move_by_offset(260,0) #移动滑块,其中的260是之前计算出来的需要滑动的距离 action.release().perform() #释放滑块 
  • 最终运行结果如下图所示,模拟滑块成功。

在这里插入图片描述

  • 需要注意的是,现在有一些含有滑块验证码的网页会检测当前浏览器是否为Selenium库的webdriver模拟浏览器,如果是的话,便很难模拟滑动成功。这种反爬机制已经不是验证码反爬,而是webdriver反爬,处理起来比较困难。这里有一个讨巧的解决方法:如果登录阶段需要进行滑动验证(如淘宝的登录),那么可以在代码中用time.sleep()等待一段时间,在这段时间内用其他方式手动登录,如手动扫码登录,登录成功后再用Selenium库继续爬取。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223635.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:45
下一篇 2026年3月17日 下午1:45


相关推荐

  • noip2014普及组初赛答案_观光3路公交车路线

    noip2014普及组初赛答案_观光3路公交车路线风景迷人的小城Y市,拥有n个美丽的景点。由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第0分钟出现在1号景点,随后依次前往2、3、4……n号景点。从第i号景点开到第i+1号景点需要Di分钟。任意时刻,公交车只能往前开,或在景点处等待。设共有m个游客,每位游客需要乘车1次从一个景点到达另一个景点,第i位游客在Ti分钟来到景点Ai,希望乘车前往景点Bi(Ai

    2026年3月4日
    3
  • js中find的用法_js中find函数

    js中find的用法_js中find函数首先简单的介绍一下ES6是什么,可能很多人还是第一次听说,我们都知道H5是html的新一代的标准,同样,ES6是javascript的新一代标准,全称是ECMAScript6.0,简称ES6,其实不是什么神秘的东西。15年6月发布的。今天我们要说的是结合ES6新特性谈一下js里面的一个很好用的方法-find()现在的前端和过去的不一样,过去的前端只要会画页面就行了,但是现在仅仅会画页面已…

    2022年10月14日
    3
  • 全网疯传的 Claude Code,3000 字保姆级教程 !

    全网疯传的 Claude Code,3000 字保姆级教程 !

    2026年3月16日
    2
  • 软件测试缺陷报告内容_软件测试缺陷分析

    软件测试缺陷报告内容_软件测试缺陷分析1软件缺陷缺陷是一种泛称,它可以指功能的错误,也可以指性能低下,易用性差等 并不是所有的测试人员都能提交被开发认可的缺陷,也不是测试人员在任何时候都能提交被开发认可的缺陷2什么是软件缺陷软件未达到产品说明书标准的功能 软件出现了产品说明书指明不会出现的错误 软件功能超出产品说明书指明范围 软件未达到产品说明书虽未指出但应达到的目标 软件测试员认为软件难以理解,不易使用,运行速度缓慢,或者最终用户认为不好3缺陷产生的原因4发现缺陷用户体验不够好 界面上有明显的错误信

    2026年1月15日
    8
  • 2026.3.8最新版 OpenClaw Ubuntu/Windows WSL 安装攻略,一篇搞定

    2026.3.8最新版 OpenClaw Ubuntu/Windows WSL 安装攻略,一篇搞定

    2026年3月13日
    2
  • 对于java二维数组初始化的理解[通俗易懂]

    对于java二维数组初始化的理解[通俗易懂]1.初始化:在定义变量之后,系统为变量分配的空间内存储的值是不确定的,所以要对这个空间进行初始化以确保程序的安全性和确定性2.给二维数组元素赋值:b[0]={1,2,3}//Arrayconstantscanonlybeusedininitializers数组常量只能被用于初始化,初始化动作在编译时完成。b[0]=newint[]{1,2}//赋值newin…

    2022年5月25日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号