C# Selenium 破解腾讯滑动验证

什么是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#)

 51testinghttp://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   /// <summary>
 2
 3         /// 比较两张图片的像素,确定阴影图片位置
 4
 5         /// </summary>
 6
 7         /// <param name="oldBmp"></param>
 8
 9         /// <param name="newBmp"></param>
10
11         /// <returns></returns>
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://github.com/0zhouquan0/QQ_LoginTest

效果图:

原文地址:https://www.cnblogs.com/ZQWelcomeIndex/p/8367202.html

时间: 2024-07-28 22:45:12

C# Selenium 破解腾讯滑动验证的相关文章

selenium模板实现实现滑动验证

1心得体会 之前还没有听说过selenium模板,现在发现这个模板挺牛逼的.能自动模拟用户操作浏览器,不过缺点就是慢了写,但是不需要自己写cookie.headers这些了,毕竟是用真实的浏览器去模板.主要是好不是很熟练,还需要多敲代码. 2.selenium介绍 selenium是一款自动化测试工具,支持很多主流的浏览器.只要浏览器安装了依赖驱动就行. 下面代码是模拟访问百度操作 1 from selenium import webdriver 2 driver = webdriver.Chr

破解极验滑动验证码

阅读目录 一 介绍 二 实现 三 说明 一 介绍 一些网站会在正常的账号密码认证之外加一些验证码,以此来明确地区分人/机行为,从一定程度上达到反爬的效果,对于简单的校验码Tesserocr就可以搞定,如下 但一些网站加入了滑动验证码,最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/,下图是极验的登录界面 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家企业正在使用极验,每天服务响应超过四亿次,广泛应用于直播视频.金融服务.

滑动验证

代码 from selenium import webdriver # 用来驱动浏览器的 from selenium.webdriver import ActionChains # 破解滑动验证码的时候用的 可以拖动图片 import time from PIL import Image import random option = webdriver.ChromeOptions() option.add_argument('disable-infobars') driver = webdriv

Android基础控件——SeekBar的使用、仿淘宝滑动验证

学习,学习,学以致用 SeekBar是一个拖动条控件,最简单的案例就是我们的调节音量,还有音频视频的播放,传统的SeekBar样式,如图 传统的实现太简单,不足以让我们到能装逼的地步.本来是打算实现滴滴出行滑动完成订单的效果,可惜找不到效果图,今天也就用淘宝的滑动验证来作为实例 SeekBar:使用progressDrawable属性自定义SeekBar 拖动块:使用thumb属性更改,其实就是一张图片 文字:使用RelativeLayout嵌套在一起 其效果是 android:max:设置进度

Spring Boot 整合滑动验证

极验是一种利用生物特征与人工智能技术解决人机交互安全问题的技术,旨在解决安全验证问题,例如:账号登录.短信验证.批量注册等,目前极验.网易易盾比较出众. 在这里主要使用的极验Geetest和springboot 框架整合. 1.首先到极验官网注册账号获取ID和KEY,这里赘述. 2.到极验官网下载,使用SDK,点击下载,如果你使用时Git工具, #git clone https://github.com/GeeTeam/gt3-java-sdk.git 3.引入SDK到Springboot项目中

前端滑动验证+拼图滑动验证效果

相信大家都玩过B站,B站在登陆的时候有个拼图滑动验证,今天就整合一下前端实现的滑动验证 拖动滑动验证(无背景图片) <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>拖动滑块验证</title> </head> <bod

selenium 模仿腾讯邮箱登录

现在用selenium模仿腾讯邮箱登录 思路:定位页面用户名.密码元素.输入即可,在定位登录按钮,点击即可 注意:直接去定位用户名.密码,找不到,通过检查网页源代码,发现页面存在嵌套现象,必须切换到登录frame中,才能定位到用户名,密码元素 下面请看代码: from selenium import webdriver import time #定义登录函数 def login_qqmail(browser,username,password): driver = browser driver.

图片滑动验证的实现

有时候在页面登录或者注册的时候,为了防止不是机器人操作,会让用户手动来滑动图片验证.我在做项目时用到了这个功能,这里记录一下自己的想法和做法. 实现的效果如图所示: 好了,现在来说说想法. 关于图片滑动验证一般是要前后端来交互的.首先是要后台处理好图片,然后将处理出来的图片返回到前台.后台随机抽取一张模板图片,也就是完整的图片,然后通过代码来操作将一块区域的图扣出来,将扣掉的地方填成灰色或者黑色,这样,素材就有了. 在返回到前台时,要将图片转码为base编码.在前台接收时,要使用如下方式来讲ba

selenium处理极验滑动验证码

要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了一下. 1.使用htmlunit(这种方式我没成功,模拟鼠标拖拽后轨迹没生成,可以跳过) 我用的是java,我首先先想到了用直接用htmlunit,我做了点初始化 private void initWebClient() { if (webClient != null) { return; } we