python滑动验证码处理,python爬虫滑块验证破解
验证码作为自然人机器人的判别工具,广泛应用于各种场景,防止程序被自动化。在传统的字符验证安全已经名存实亡的情况下,各种新的验证码如雨后春笋般出现。今天我想和大家分享一个滑块验证码的Python实现。
本节将解释下图所示的滑块验证码(更复杂的滑块验证码将在下一篇文章中介绍)。这个验证码机制很简单:拖动滑块到滑轨的最右端,完成验证,如下图所示。如果不把滑块拖到滑轨的最右端,就不能通过验证,验证失败后滑块会回到起始位置。
关键是用Selenium库模拟鼠标拖动滑块滑动一定距离。因为滑块的起始位置与滑轨相同,所以滑块需要移动的距离等于滑轨的跨度减去滑块的宽度。让我们使用开发工具来检查滑轨和滑块的宽度。
在浏览器中打开本书支持代码文件中为滑块验证码构建的本地网页文件“index.html”,打开开发者工具,然后使用元素选择按钮选择整个滑轨。此时的界面如下图所示。您可以看到显示了滑轨的大小和颜色等属性。检查滑轨尺寸有两种方法:如图中箭头所示。
可以像查看滑轨一样查看滑块的宽度。使用元素选择工具选择滑块以查看滑块的宽度。可以看到模拟滑动的距离是260像素。
下图开始写代码。首先用硒库打开网页。代码如下:
从selenium导入web驱动程序
浏览器=webdriver。铬合金()
URL=r d : \ works \ python _ crawl 1 \ 《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=web driver . actionchchains(browser)#启动操作链
Action.click _ and _ hold(华快)。perform () #按住滑块。
Action.move_by_offset(260,0) #移动滑块,其中260是之前计算的滑动距离。
Action.release()。执行()#释放滑块
完整的代码如下,其中还使用了时间库的sleep()函数,在模拟滑动之前等待两秒钟,以观察滑动效果。
从selenium导入web驱动程序
导入时间
# 1.访问网址
浏览器=webdriver。铬合金()
URL=r d : \ works \ python _ crawl 1 \ 《Python爬虫(进阶与进通)》代码摘要\2。验证码抓取\3。滑块验证码\index.html
Browser.get(url) #用模拟浏览器打开网页
# 2.定位滑块
huakuai=browser . find _ element _ by _ XPath(//*[@ id= code-box ]/span )
# 3.开始滑动
action=web driver . actionchchains(browser)#启动操作链
Action.click _ and _ hold(华快)。perform () #按住滑块。
时间.睡眠(2)
Action.move_by_offset(260,0) #移动滑块,其中260是之前计算的滑动距离。
Action.release()。执行()#释放滑块
最终运行结果如下图所示,模拟滑块成功。
需要注意的是,有些带有滑块验证码的网页会检测当前浏览器是否是Selenium库的webdriver模拟浏览器。如果是这样,就很难模拟出成功的滑行。这个防爬机制不是验证码防爬,而是webdriver防爬,很难处理。这里有一个简便的解决方法:如果在登录阶段(比如淘宝登录)需要滑动验证,可以用time.sleep()在代码中等待一段时间,在这段时间内通过其他方式手动登录,比如手动扫码登录,成功登录后再继续用Selenium库爬取。
关于Python对滑块验证码的详细讲解,这篇文章就到这里了。关于Python滑块验证码的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。