Selenium实战滑块验证码登陆网站

目录

问题背景

问题分析

环境部署

Selenium基础

解决验证码滑块人机交互问题

缺口识别

轨迹提交

初阶,简单滑动

高阶,对抗 反机器人技术


问题背景

很久以前有个网站上数据交互自动化,需要登录后才能进行,就临时学了selenium,现在也用不上了,就总结一下。

整个交互流程:先是输入密码,然后鼠标拖动验证码滑块完成人机验证,登录完成后通过cookie或者session授权进行数据交互。

问题分析

这个问题难点在于:

1、如何驱动网页的鼠标键盘交互,拿到网页中的重要信息;

2、滑块验证码正确滑动以及人手的轨迹模拟;

第一个问题中键鼠交互其实有很多方案可以实现,不论是使用第三方库还是通过系统API等方案,但是后需要拿cookie的话,就麻烦了,毕竟是不在一个进程里的逻辑;所以综合起来,用selenium最方便,Selenium可以说是非常强大的工具了。

第二个问题,在交互技术底层,其实是形成一个请求数据包提交到服务器来完成人机验证工作的。目前其实已经有很多个方案,解决问题可以从模拟人机交互入手,也可以从数据包构造入手。

环境部署

安装环境(注意Chromedriver版本与Chrome版本一致):selenium 安装与 chromedriver安装 - Rogn - 博客园

[小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建 - 小北@Alan - 博客园

user data保持:selenium设置chrome浏览器保持登录方式两种options和c

滑块验证码是一种通过用户鼠标移动滑块来填补有缺口图片的验证码。它的原理是首先生成一张带有缺口的图片,然后在页面上展示给用户。用户需要通过鼠标移动滑块,将滑块拖动到正确的位置,以填补缺口。通过JavaScript获取用户滑动距离和坐标等信息,并将这些信息发送给后台进行校验。只要用户的滑动距离和轨迹行为符合要求,即可视为验证通过。 在使用selenium处理滑块验证码时,可以利用selenium的方法对元素进行截图来获取验证码的图片。首先,找到包含滑块的HTML元素,然后使用selenium分别对完整图片和有缺口的图片进行截图。以下是获取完整图片和有缺口图片的示例代码: 获取完整图片: ''' def get_full_image(driver): """鼠标移动到滑块,显示完整图案 :param driver: webdriver :return: 返回验证码背景图片Image对象 """ webdriver.ActionChains(driver).move_to_element(slider).perform() time.sleep(0.2) img = driver.find_element_by_xpath('//*[@id="captcha"]/div/div/div/div/a') if 'show' in img.get_attribute('class'): res = img.screenshot_as_png return Image.open(BytesIO(res)) else: raise ValueError('获取验证码背景图片失败') ''' 获取有缺口的图片: ''' def get_cut_image(driver): """点击滑动按钮获取有缺口图片 :param driver: webdriver :return: 返回验证码有缺口图片的Image对象 """ slider = driver.find_element_by_xpath('//*[@id="captcha"]/div/div/div') webdriver.ActionChains(driver).click_and_hold(slider).perform() time.sleep(0.1) img = driver.find_element_by_xpath('//*[@id="captcha"]/div/div/div/div/a') res = img.screenshot_as_png cut_img = Image.open(BytesIO(res)) return Image.open(BytesIO(res)) ''' 以上代码可以通过selenium的ActionChains类模拟鼠标的移动和点击操作,分别获取到完整图片和有缺口的图片。 通过这些方法可以帮助你在处理selenium中的滑块验证码时获取到所需的图片,从而进行后续的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值