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

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

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

于是大家回去【source】去找,也会发现都没有看到原图的地址呢?
难道没法找到原图的地址吗?
其实不是的,大家可以试试把上面那么长的地址后面index=1改为index=0,你就会发现这个图就是原图哦!

那么接下来就是对比像素得到缺块凹槽的位置
代码如下:
/// <summary>
/// 比较两张图片的像素,确定阴影图片位置
/// </summary>
/// <param name="oldBmp"></param>
/// <param name="newBmp"></param>
/// <returns></returns>
public static int GetArgb(Bitmap oldBmp, Bitmap newBmp)
{
//由于阴影图片四个角存在黑点(矩形1*1)
for (int i = ; i < newBmp.Width; i++)
{
for (int j = ; j < newBmp.Height; j++)
{
if ((i>=&&i<=)&&((j>=&&j<=)||(j>= (newBmp.Height-)&&j<=(newBmp.Height - ))))
{
continue;
}
if ((i >= (newBmp.Width-) && i <= (newBmp.Width - )) && ((j >= && j <= ) || (j >= (newBmp.Height - ) && j <= (newBmp.Height - ))))
{
continue;
}
//获取该点的像素的RGB的颜色
Color oldColor = oldBmp.GetPixel(i, j);
Color newColor = newBmp.GetPixel(i, j);
if (Math.Abs(oldColor.R - newColor.R) > || Math.Abs(oldColor.G - newColor.G) > || Math.Abs(oldColor.B - newColor.B) > )
{
return i;
}
}
}
return ;
}
其中细心的同学会发现为啥比较像素点的时候,出现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
效果图:

C# Selenium 破解腾讯滑动验证的更多相关文章
- selenium+java破解极验滑动验证码
摘要 分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码. 人工验证的过程 打开威锋网注册页面(https://passport.feng.com/?r=user/r ...
- selenium+java破解极验滑动验证码的示例代码
转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085 ...
- python+selenium破解极验验证登录
1.前言: 目前很多网站会在正常的账号密码认证之外加一些验证码,以此来明确区分人/机行为,最典型的就是极验滑动验证.(如下图) 这里我们以简单实例说明如何实现自动校验类似验证. 2.步骤: 1)点击验 ...
- 使用 Python+Selenium 破解滑块验证码
开发工具 Python版本:3.6.4 相关模块: pillow模块: selenium模块: numpy模块: 以及一些Python自带的模块. 其他: chromedriver 环境搭建 安装 ...
- Python 破解极验滑动验证码
Python 破解极验滑动验证码 测试开发社区 1周前 阅读目录 极验滑动验证码 实现 位移移动需要的基础知识 对比两张图片,找出缺口 获得图片 按照位移移动 详细代码 回到顶部 极验滑动验证码 以 ...
- 滑动验证的设计与实现J2EE
滑动验证的设计与实现J2EE 注:本博文为博主原创,转载请注明出处. 项目源码地址:https://github.com/zhangxy1035/Verify 本篇博文的主要目录如下: 一.项目简介二 ...
- What?废柴, 模拟登陆,代码控制滑动验证真的很难吗?Are you kidding???
1.简介 在前边的python接口自动化的时候,我们由于博客园的登录机制的改变,没有用博客园的登录测试接口.那么博客园现在变成了滑动验证登录,而且现在绝大多数的登录都变成这种滑动验证和验证码的登录验证 ...
- DRF 中使用 级验科技滑动验证
接口的login 登录 使用 Django 中的 auth 认证 因为之前合并了 django 的 用户表 创建的 用户 密码 会在内部进行加密 不知道加密方式所以要使用 authenticate 来 ...
- 滑动验证 和滑动图片验证JS
滑动验证 先放效果图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
随机推荐
- Redis和mysql数据怎么保持数据一致的?
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景, ...
- 利用RALL机制来事项String类的赋值操作
class String{ public: char *str; String(const char *ptr=NULL){ if(ptr==NULL) { str=NULL; }else{ str= ...
- day1:java学习第一天之eclipse安装
选择开发语言的学习其实不用纠结,如果你说自己是做开发的,连最流行的开发语言都不会,好像说不过去,并且最流行也说明用的人多,优秀的人也会,自己要提高要多向优秀的人学习.想明白这点其实选择就好说了,再一个 ...
- Oracle 10g 使用REGEXP_SUBSTR 分拆字符串 (转)
SELECT l_count, REGEXP_SUBSTR('add, daddf, dsdf, asdfa, dsfasd, dsfad','[^,]+',1,l_count) AS NAME F ...
- Python中__init__()和self的有啥用
这篇博客让我一下子就理解了,https://www.cnblogs.com/illusion1010/p/9527034.html,感谢博主 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一 ...
- Linux实战
1.root用户无法删除文件 [root@VM_0_9_centos .ssh]# lsattr authorized_keys ----i----------- authorized_keys ls ...
- C# 解析html中筛选class的问题
C# 解析html中筛选class的问题 C# html解析 class 类 当我们用C#的.net解析html的时候,当html的元素没有id,并且没有过多的属性供筛选,只能通过class=&qu ...
- flutter 读取sdcard权限问题相关
https://stackoverflow.com/questions/46698751/permission-denied-at-externalstoragedirectory-access-vi ...
- 【题解】Luogu P4121 [WC2005]双面棋盘
原题传送门 这道题肥肠毒瘤qwqwq,我被卡了qwqwq 这题的正解好像是线段树+并查集,但由于我人丑常数大被卡成了70 #include <bits/stdc++.h> #define ...
- shell脚本-工作练习篇
瞎扯时间 人的惰性真的很难去戒掉,每天工作下班回家后,只想瘫倒在床上,玩玩手游,刷刷抖音,甚至看看无聊至极的“爽文”,对于学习.看书啥的,完全提不起兴趣,也许正是因为如此,我才显得这么平庸而无趣吧. ...