说明
文章首发于HURUWO的博客小站,本平台做同步备份发布。
如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览。
直接点击即可前往访问。
前言
通常我们在做自动化任务时候,经常会遇到一些验证码验证。
其中遇到最多的还是滑块验证码,下面我们来单独探讨这个滑块的过程。
一些说明 因为滑块通常是拼图形式 或者是干脆就是从左到右的滑动就行。
这里只重点讨论滑块的滑部分 关于识别滑动位置 需要单独开文章来讲解
图中的例子
逆向抓包拦截方案(好用但不通用)
核心思想就是对验证的页面进行逆向分析,根据上传的包信息。分析出具体滑动的参数,直接伪造一条滑动参数过去。
服务器后台接收参数之后认为你已经滑动成功,代替手动滑过。
但是要做的这一点需要极高的知识储备,需要很多的逆向知识。
优点是很快 很有针对性
缺点是
1.难度大 通常还有很多的参数校验 需要一一破解
2.不够通用也不够灵活 一个新的app或者新的滑块都需要重写全部逻辑
所以我们探讨一种通用的 滑动协议 就是使用自动化的方式代替我们去滑动。
自动化滑动方案(通用但是不够好)
既然讨论的是滑动 当然就是关于如何自动化而不是手动,不然所有讨论都没有意义。
关于自动化 类似的方案有:
1.adb
2.appium 测试框架 等 方案
3.无障碍 类似auto.js 等 方案
现在测试下三种方案的滑动代码
1.adb 滑动代码
adb shell input swipe 250 250 300 300
指的就是从 250,250 滑动到 300,300 坐标 可以多段坐标移动 匀速的
2.appium滑动代码
关于appium 我用的不多,我只能直接从网上抓到一部分代码
http://appium.io/ 文档里关于滑动这一块的:
Android 4.3+: 谷歌的 UiAutomator / UiAutomator2Android 2.3+: 谷歌的 Instrumentation. (通过绑定独立的项目—— Selendroid 提供对 Instrumentation 的支持)
因为appium是基于谷歌的测试框架的 所以逻辑类似:
https://appium.io/docs/en/writing-running-appium/touch-actions/
https://appium.io/docs/en/writing-running-appium/android/android-mobile-gestures/
这是关于点击操作的文档地址
关于滑动手势swipeGesture
的
该手势在给定的元素/区域上执行滑动手势。自Appium v1.19起可用
支持的参数
elementId:要刷卡的元素的ID。如果缺少元素ID,则必须提供滑动边界区域。如果同时提供了元素ID和滑动边界区域,则该区域将被有效忽略。
left:滑动边界区域的左坐标
top:滑动边界区域的顶部坐标
width:滑动边界区域的宽度
height:滑动边界区域的高度
方向:滑动方向。强制值。可接受的值为:up,down,left和right(不区分大小写)
percent:滑动的大小占滑动区域大小的百分比。有效值必须是0..1范围内的浮点数,其中1.0是100%。强制值。
speed:执行此手势的速度,以每秒像素为单位。该值不能为负。默认值为5000 * displayDensity
代码示例:
((JavascriptExecutor) driver).executeScript("mobile: swipeGesture", ImmutableMap.of