脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python实现滑块验证码详解

Python实现滑块验证码详解

2022-12-19 13:13Triumph19 Python

验证码作为一种自然人的机器人的判别工具,被广泛的用于各种防止程序做自动化的场景中。传统的字符型验证安全性已经名存实亡的情况下,各种新型的验证码如雨后春笋般涌现,今天给大家分享一篇Python实现滑块验证码

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

Python实现滑块验证码详解

其中的关键是需要用Selenium库模拟鼠标拖动滑块滑动一定的距离。因为滑块的起始位置和滑轨的起始位置相同,所以滑块需要移动的距离等于滑轨的跨度减去滑块的宽度。下面就来利用开发者工具查看滑轨和滑块的宽度。

在浏览器中打开本书配套代码文件中为滑块验证码搭建的本地网页文件“index.html”,打开开发者工具,然后用元素选择按钮选中整个滑轨,此时的界面如下图所示。可以看到其中显示了滑轨的尺寸和颜色等属性。要查看滑轨的尺寸,有两种方法:图中箭头所示。

Python实现滑块验证码详解

滑块宽度的查看方法和滑轨相同,用元素选择工具选中滑块,可以看到滑块的宽度。由此可知需要模拟滑动的距离为260像素。

Python实现滑块验证码详解

下图开始编写代码。首先用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() #释放滑块

最终运行结果如下图所示,模拟滑块成功。

Python实现滑块验证码详解

需要注意的是,现在有一些含有滑块验证码的网页会检测当前浏览器是否为Selenium库的webdriver模拟浏览器,如果是的话,便很难模拟滑动成功。这种反爬机制已经不是验证码反爬,而是webdriver反爬,处理起来比较困难。这里有一个讨巧的解决方法:如果登录阶段需要进行滑动验证(如淘宝的登录),那么可以在代码中用time.sleep()等待一段时间,在这段时间内用其他方式手动登录,如手动扫码登录,登录成功后再用Selenium库继续爬取。

到此这篇关于Python实现滑块验证码详解的文章就介绍到这了,更多相关Python滑块验证码内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/Triumph19/article/details/124571151

延伸 · 阅读

精彩推荐
  • Python详解python数据结构之队列Queue

    详解python数据结构之队列Queue

    这篇文章主要介绍了python数据结构之队列Queue,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下...

    jianshuilan_06137992021-10-26
  • Pythonpython实现多线程行情抓取工具的方法

    python实现多线程行情抓取工具的方法

    当我们实现了单线程,接下来就是实现多线程了,下面这篇文章主要给大家介绍了关于python实现多线程行情抓取工具的方法,文中通过示例代码介绍的非常详...

    duduniao854952021-01-18
  • Python如何利用python制作时间戳转换工具详解

    如何利用python制作时间戳转换工具详解

    这篇文章主要给大家介绍了关于如何利用python制作时间戳转换工具的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考...

    vinter_he5602021-04-01
  • PythonDjango中对数据查询结果进行排序的方法

    Django中对数据查询结果进行排序的方法

    这篇文章主要介绍了Django中对数据查询结果进行排序的方法,利用Python代码代替SQL进行一些简单的操作,需要的朋友可以参考下...

    Python教程网11952020-07-24
  • PythonPython 数据分析教程探索性数据分析

    Python 数据分析教程探索性数据分析

    这篇文章主要介绍了Python 数据分析教程探索性数据分析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下...

    海拥11752022-08-17
  • PythonPython使用Matplotlib实现雨点图动画效果的方法

    Python使用Matplotlib实现雨点图动画效果的方法

    这篇文章主要介绍了Python使用Matplotlib实现雨点图动画效果的方法,结合实例形式分析了win10安装ffmpeg及animation函数的使用相关操作技巧,需要的朋友可以参考...

    落叶_小唱8112020-12-28
  • Pythonpython自动化测试之如何解析excel文件

    python自动化测试之如何解析excel文件

    这篇文章主要介绍了python自动化测试之如何解析excel文件,今天我们就把不同模块处理excel文件的方法做个总结,直接做封装,方便我们以后直接使用,增加...

    linux超8932021-07-24
  • PythonPython全角与半角之间相互转换的方法总结

    Python全角与半角之间相互转换的方法总结

    全角与半角转换在处理汉语语料中会经常出现,这里分别说明汉字、数字、字母的unicode编码范围,下面这篇文章主要给大家介绍了关于Python全角与半角之间相...

    埃菲尔没有塔尖5262022-11-16