博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Selenium 破解腾讯滑动验证
阅读量:6093 次
发布时间:2019-06-20

本文共 2862 字,大约阅读时间需要 9 分钟。

什么是Selenium?

    WebDriver是主流Web应用自动化测试框架,具有清晰面向对象 API,能以最佳的方式与浏览器进行交互。

支持的浏览器:

 

  • Mozilla Firefox

 

  • Google Chrome

 

  • Microsoft Internet Explorer

 

  • Opera

 

  • Safari

 

  • Apple iPhone

 

  • Android browsers

 具体学习相关的地址:

 

 简书:(针对C#)

 51testing

 

如何破解呢?

1.  破解思路/方案

首先我也是在网上找了很多破解滑动验证的文章,主要看了下Github上面滑动验证破解学习的代码(python):

代码虽然是python的,但是思路很明确,于是我就去看了下菜鸟教程的语法,大致思路如下

1.找到滑动验证码的原图与出现缺块凹槽的验证码图片

2.两张图片循环进行像素点对比,然后找到像素点色差比较大点就能

 确定缺块凹槽的位置,计算偏移度

3.根据计算的偏移度将滑块移动到缺块凹槽处

如何找到对应的原图和凹槽图呢?

        F12看了下QQ控件滑动验证的对应的图片,去查找元素里面去找这个图片地址

凹槽图很容易被我们找到,

凹槽图查找元素直接在页面上可以找到

 

同样【Network】中也能找到请求的地址图片

 

 

例如

图片地址:

然后我们目前只能看到凹槽图,有人会发现【Network】中还有一个地址后面index=2的图片,其实它不是原图,它是滑块

 

于是大家回去【source】去找,也会发现都没有看到原图的地址呢?

难道没法找到原图的地址吗?

其实不是的,大家可以试试把上面那么长的地址后面index=1改为index=0,你就会发现这个图就是原图哦!

 

 

那么接下来就是对比像素得到缺块凹槽的位置

 

代码如下:

    

1   ///  2  3         /// 比较两张图片的像素,确定阴影图片位置 4  5         ///  6  7         ///  8  9         /// 10 11         /// 
12 13 public static int GetArgb(Bitmap oldBmp, Bitmap newBmp)14 15 {16 17 //由于阴影图片四个角存在黑点(矩形1*1)18 19 for (int i = 0; i < newBmp.Width; i++)20 21 {22 23 24 25 for (int j = 0; j < newBmp.Height; j++)26 27 {28 29 if ((i>=0&&i<=1)&&((j>=0&&j<=1)||(j>= (newBmp.Height-2)&&j<=(newBmp.Height - 1))))30 31 {32 33 continue;34 35 }36 37 if ((i >= (newBmp.Width-2) && i <= (newBmp.Width - 1)) && ((j >= 0 && j <= 1) || (j >= (newBmp.Height - 2) && j <= (newBmp.Height - 1))))38 39 {40 41 continue;42 43 }44 45 46 47 //获取该点的像素的RGB的颜色48 49 Color oldColor = oldBmp.GetPixel(i, j);50 51 Color newColor = newBmp.GetPixel(i, j);52 53 if (Math.Abs(oldColor.R - newColor.R) > 60 || Math.Abs(oldColor.G - newColor.G) > 60 || Math.Abs(oldColor.B - newColor.B) > 60)54 55 {56 57 return i;58 59 }60 61 62 63 64 65 }66 67 }68 69 return 0;70 71 }72 73

 

其中细心的同学会发现为啥比较像素点的时候,出现continue跳出的情况的呢?

     在凹槽图的四个角,有四个黑点,如果每个单位点去判断,会导致导致像素会0的时候跳出循环,得到的偏移量自然就是0了,所以这肯定是有问题的,那么我是把这四个角的理解成1*1的矩形块,所以在这个块里的像素点直接跳出,不用比较

 

那么我们计算出了偏移量,如何移动滑块呢?

      不用急,了解Selenium就知道,它提供的有Actions这个类,下面有很多可以移动的方法

      你可以直接调用DragAndDropToOffset移动元素到一定的偏移量

      或者你可以使用ClickAndHold鼠标左键单击并不松开,然后MoveByOffset移动一定的偏移量,最后Release释放即可

 

   然后中途我遇见一些bug

     在使用PhantomJS+Selenium的时候,iframe中Actions对象所有的移动相关的方法都对元素不起任何作用,很痛苦呀,我在stackoverflow中发现很多人也都遇到这样的情况,但是也都没有明确的答案,最后还是放弃了PhantomJS+Selenium,选择了Chrome+ Selenium形式进行测试,发现也还是没有效果,于是换了其他电脑的Chrome浏览器试了试,发现居然可以了,可以肯定的是这个可能跟Chrome版本有关,高版本反而没法玩,哎……,最近Selenium.Chrome.WebDriver这个组件更新到了2.35,貌似解决了这个问题

 

其实破解验证码是进行爬虫系列操作的第一步也是最为关键的一步

 

源码:

 

效果图:

 

转载于:https://www.cnblogs.com/ZQWelcomeIndex/p/8367202.html

你可能感兴趣的文章
全局探色器
查看>>
Hive Export和Import介绍及操作示例
查看>>
http://mongoexplorer.com/ 一个不错的 mongodb 客户端工具。。。
查看>>
上传jar包到nexus私服
查看>>
Why Namespace? - 每天5分钟玩转 OpenStack(102)
查看>>
Project:如何分析项目中的资源分配情况
查看>>
HDU 4803 Poor Warehouse Keeper (贪心+避开精度)
查看>>
小错误汇总
查看>>
Spring源码系列 — Envoriment组件
查看>>
java正则表达式去除html标签,Java中正则表达式去除html标签
查看>>
使用Cobbler批量部署Linux操作系统
查看>>
zabbix企业应用之服务端与客户端的安装
查看>>
实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】
查看>>
无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证
查看>>
Bat相关的项目应用
查看>>
Django为数据库的ORM写测试例(TestCase)
查看>>
NYOJ-107 A Famous ICPC Team
查看>>
与众不同 windows phone (44) - 8.0 位置和地图
查看>>
Visual Studio Code 使用 ESLint 增强代码风格检查
查看>>
iOS设备中的推送(二):证书
查看>>