Selenium实战滑块验证码登陆网站
Posted XiaoYNil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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和cookie - 后来的后来 - 博客园
webdriver.support版本问题导致4.0版本中ExpectedConditions不可用:c# Selenium ExpectedConditions 不存在_weixin_30256505的博客-CSDN博客
Selenium基础
网页状态机相关:
如何通过Python+Selenium+PhantomJS/Chrome获取HTTP状态和Response Headers_在路上吗-CSDN博客
[Selenium] selenium — selenium三种等待方式解读,waituntil sleep等_HK_John的博客-CSDN博客
元素定位和操作:
[小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位 - 小北@Alan - 博客园
python selenium-webdriver 元素操作之鼠标操作(四) - 梦雨情殇 - 博客园
Selenium获取input输入框中值的三种方法_沈伟-测试前行者-CSDN博客
Selenium XPATH详解 - 清风软件测试 - 博客园
在网页中执行javascript:
Selenium WebDriver中常用到的JavaScript操作_greta_guo的博客-CSDN博客
selenium的操作JS命令的接口JavascriptExecutor的介绍 - 心悦飞飞 - 博客园
selenium webdriver——JS对Input执行输入 - hjhsysu - 博客园
cookie等信息抓取:How to launch chrome with performance logging .net · Issue #1844 · SeleniumHQ/selenium · GitHub
其它:
自动化测试 - Selenium For C# - 随笔分类 - 小北@Alan - 博客园
解决验证码滑块人机交互问题
缺口识别
目前滑动验证码的缺口方案有两种,一种是原图和缺口图都能被用户看到,一种是只有缺口图传给客户端。(具体哪一种需要分析前端代码)
显然,第一种方案的缺口识别比较简单点,只需两图做一个diff再去掉一些噪点即可;
第二种缺口图稍微麻烦点,需要识别缺口位置,通过传统的图像识别技术识别缺口形状,或者利用颜色突变等方法结合基本都能解决;而神经网络的方法,基本一个小型的检测网络也能搞定了,训练库的生成都可以通过网图来随机生成。
轨迹提交
初阶,简单滑动
一般的滑动验证码,能完成滑块的正确填充即可,可以根据自己的喜好生成滑动轨迹,注意下selenium的鼠标行为提交时有延迟。
高阶,对抗 反机器人技术
现在的一些滑块验证码技术,有的存在反机器人技术,就比较麻烦。
这里采用预设函数+简易的强化学习方案来优化轨迹提交成功率,需要调试过拟合的问题。
以上是关于Selenium实战滑块验证码登陆网站的主要内容,如果未能解决你的问题,请参考以下文章