如何用Python写滑块验证码,重点是什么
Admin 2022-09-19 群英技术资讯 270 次浏览
本节要讲解如下图所示的滑块验证码(更为复杂的滑动拼图验证码在下一篇介绍)。这种验证码机制比较简单:将滑块拖动到滑轨的最右端即可完成验证,如下图所示。如果未将滑块拖动到滑轨的最右端,则无法通过验证,验证失败后滑块会回到起始位置。
其中的关键是需要用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库继续爬取。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章介绍了python自动化测试之破解图文验证码的解决方案,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
Python内置函数-locals() 函数。locals() 函数会以字典类型返回当前位置的全部局部变量。
在我国,我们使用的是摄氏温度,如果突然说起华氏温度,可能会忘记公式,这时就可以依赖我们万能的计算机来计算,本文小编就向大家演示用python将华氏温度转换为摄氏温度的过程。
该教程其实源于web,我看到之后觉得很实用,于是自己又重复做了一遍,写了详细的注释分享给大家,希望对大家的研究有帮助,本文讲述了栅格的分区统计,批量提取,深化理解遍历循环等内容
这篇文章主要介绍了用Python写一个简易版弹球游戏,文中有很多实用代码,对正在学习python的小伙伴们有很大的帮助.需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008