C#编程之C# Selenium 破解腾讯滑动验证
小标 2018-11-14 来源 : 阅读 1764 评论 0

摘要:本文主要向大家介绍了C#编程之C# Selenium 破解腾讯滑动验证,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之C# Selenium 破解腾讯滑动验证,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

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

Mozilla Firefox

 

Google Chrome

 

Microsoft Internet Explorer

 

Opera

 

Safari

 

Apple iPhone

 

Android browsers

 具体学习相关的地址:
 
 简书:https://www.jianshu.com/search?q=c%23%20Selenium&page=1&type=note(针对C#)
 51testing://www.51testing.com/zhuanti/selenium.html
 
如何破解呢?
1.  破解思路/方案
首先我也是在网上找了很多破解滑动验证的文章,主要看了下Github上面滑动验证破解学习的代码(python):https://github.com/dzhongyi/crack-geetest
代码虽然是python的,但是思路很明确,于是我就去看了下菜鸟教程的语法,大致思路如下
1.找到滑动验证码的原图与出现缺块凹槽的验证码图片
2.两张图片循环进行像素点对比,然后找到像素点色差比较大点就能
 确定缺块凹槽的位置,计算偏移度
3.根据计算的偏移度将滑块移动到缺块凹槽处
如何找到对应的原图和凹槽图呢?
        F12看了下QQ控件滑动验证的对应的图片,去查找元素里面去找这个图片地址
凹槽图很容易被我们找到,
凹槽图查找元素直接在页面上可以找到

 
同样【Network】中也能找到请求的地址图片
 
 
例如
图片地址:
https://ssl.captcha.qq.com/cap_union_new_getcapbysig?aid=549000912&asig=&captype=&protocol=https&clientype=2&disturblevel=&apptype=2&curenv=inner&ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzYzLjAuMzIzOS4xMzIgU2FmYXJpLzUzNy4zNg==&sess=CvU-D6haDOeZFH0zeUlUibQIontTfGSAVOmDKhjwtnlz8WFHRqcVt-vwYuCkafg9J_3L91cxAtwnwlVW44JTDBrrZXGMh3E3tcyKvJE6nuXBnW76_YHAndm0lkSKU7nWqpRJ36WNQbC5nv_faj4MJgr72dyG6iZz3a6wfYNxs9Wz_lYDZJUM1UOb2_yHDIxD&theme=&sid=6515699529621463059&noBorder=noborder&fb=1&forcestyle=undefined&showtype=embed&uid=111111&cap_cd=-BF6yU_7cioGpNgJGSBfMDVFU_W2BtTfRrNMFl84BHVyE1fLgKJtuQ**&lang=2052&rnd=584033&rand=0.867168954944683&vsig=c01haL2nNmvtlR5Wd4LVdBEa2wO95Wz993a9Qd8yizjOFR9GqjeC5KKmZzqxLxrBl88WHggcxN-KxPeEfyM1mhTE52Ju6v7dCFOi6HyIHMt_HR3AJpRbYCPm0mY3MtN8rqx62FFy_2L6WbMnn9f8iJZoev4XvbNrVtwfT6zUM4zL5Dw7-KndrxPdg**&img_index=1
然后我们目前只能看到凹槽图,有人会发现【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="" -="" j="">= 0 && j <= 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,貌似解决了这个问题
 
其实破解验证码是进行爬虫系列操作的第一步也是最为关键的一步

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程