爽,我终于掌握了selenium图片滑块验证码

因为种种原因没能实现愿景的目标,在这里记录一下中间结果,也算是一个收场吧。这篇文章主要是用selenium解决滑块验证码的个别案列。

思路:

  • 用selenium打开浏览器指定网站

  • 将残缺块图片和背景图片下载到本地

  • 对比两张图片的相似地方,计算要滑动的距离

  • 规划路线,移动滑块

01实现步骤  用selenium打开浏览器浏览指定网站

1、找到chromedriver.exe的路径

点击开始找到谷歌图标==》右键更多==》打开文件位置==》右键谷歌快捷方式==》属性 ==》打开文件所在的位置 ==》复制路径

2、代码

02 将残缺块图片和背景图片下载到本地

 1、找到图片位置

打开网页进入开发者工具,找到图片位置

2、代码

03 对比两张图片的相似地方,计算要滑动的距离

1、用matchTemplate获取移动距离

因为背景图片中的残缺块位置和原始残缺图的亮度有所差异,直接对比两张图片相似的地方,往往得不到令人满意的结果,在此要对两张图片进行一定的处理,为了避免这种亮度的干扰,笔者这里将两张图片先进行灰度处理,再对图像进行高斯处理,最后进行边缘检测。

将JPG图像转变为4通道(RGBA)

2、代码

 3、检验效果

为了验证思路和方法是否得当,这里将滑块图片与背景图片进行拼接,为后面埋下一个小坑。

04 规划路线,移动滑块

 1、点击滑块移动 

        用第3节已经获取到的距离,点击滑块进行移动

神奇的事情是,坑来了,没有匹配成功。

2、匹配失败原因

这里有以下两点原因:

  • 图片尺寸发生了变化,距离要进行转换。

  • 滑块滑动时,滑块和残缺块的相对位置有变动。

首先解决图片尺寸变化问题,找到网页中图片大小:345x172.500

下载到本地图片大小:480x240

所以要对距离进行以下处理:

关于第二个问题,这里没有找到很好的测量工具测量出来,好在验证码对位置精确度要求不高,就一个个试数吧。

05  补充

 在对极验验证码进行学习中,有的网站对移动轨迹进行了验证,如果滑动太快,也会被识别出机器操作,为了模拟人工操作,出色的程序员写出了一个魔幻移动轨迹

举个例子:我们可以先超过目标,再往回移动。

06 完整代码

最后作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

### 如何用Java Selenium实现滑块验证 #### 基本原理 Selenium 是一种强大的工具,可以用来自动化浏览器操作和测试。通过编程语言与浏览器进行交互,能够模拟用户的各种行为,如点击、输入、导航等。对于滑块验证的操作,则涉及到更复杂的图像处理和精确的鼠标控制。 为了完成这一过程,不仅需要掌握基本的Selenium WebDriver API调用方法,还需要了解如何借助其他库(比如OpenCV)来进行必要的图形分析工作[^1]。 #### 关键步骤解析 - **初始化环境** 需要先设置好开发环境,安装相应的依赖包,包括但不限于Selenium客户端驱动程序以及特定于目标平台的WebDriver执行文件。 - **定位元素** 利用XPath或者其他选择器语法准确定位到页面上代表滑块及其轨道的对象实例;这是后续一切动作的基础。 - **截图对比** 对整个网页或仅限于验证码区域做快照保存下来作为参照物,在此基础上运用计算机视觉算法找出缺口所在位置从而得知应该拖拽多远的距离[^5]。 - **模拟真实轨迹** 构建自然流畅的人类手部运动模式而非直线路径来减少被检测的风险。这一步骤往往结合随机化函数生成接近真实的加速度曲线以增加成功率[^3]。 - **执行拖曳动作** 调用`Actions`类下的成员函数构建一系列连续性的指点设备指令序列最终触发实际物理意义上的拉动效果直至终点释放按钮结束整个流程[^2]。 ```java import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; // ...省略部分导入语句... public class SliderCaptcha { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); try (WebDriver driver = new ChromeDriver()) { driver.get("https://example.com"); // 替换成含有滑块验证码的目标网址 WebElement slider = driver.findElement(By.xpath("//div[@class='slider']")); // 查找滑块元素 int distance = calculateDistance(driver); // 计算所需移动距离 Actions builder = new Actions(driver); Action dragAndDropByOffset = builder.clickAndHold(slider) .moveByOffset(distance, 0) .release() .build(); Thread.sleep(1000L); // 添加适当延迟模仿人类反应时间 dragAndDropByOffset.perform(); // 继续其余逻辑... } catch (InterruptedException e) { throw new RuntimeException(e); } } private static int calculateDistance(WebDriver driver){ // 此处应加入具体计算两图差异得出偏移量的业务逻辑, // 可能会涉及第三方库的帮助,例如OpenCV。 return 0; // 返回具体的像素值表示需平移多少单位长度 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值