温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

大数据中自动化“滑板验证”实现账密登录的解决思路是什么

发布时间:2021-12-06 09:36:55 来源:亿速云 阅读:158 作者:柒染 栏目:大数据

本篇文章给大家分享的是有关大数据中自动化“滑板验证”实现账密登录的解决思路是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

很早以前只要使用账号和密码,就可以实现网站自动化登录。但是后来网站的登录验证逐步升级,出现了滑块验证。实际上更多更复杂的新验证方法不断出现(滑块验证已经属于比较传统的验证方法了)。但是对图像处理的思路还可以借鉴一下。

首先,我们使用账密登录。

大数据中自动化“滑板验证”实现账密登录的解决思路是什么

然后页面会弹出滑板掩码的图片如下。

在早期,网站会给出两幅图片,一副是有滑块的图像,一副是没有滑块的图像。

请注意这里“滑板”和“滑块”的区别:

  • “滑板”是整个图片,

  • “滑块”是下图中左侧的小方块,

  • 验证方法是拖动滑块到右侧颜色空缺的位置。

但是到了后期,为了增加登录难度,只给出一副图像,就是包含了滑块的滑板图像。

大数据中自动化“滑板验证”实现账密登录的解决思路是什么

所以,为了实现图像识别,首先我们不得不消除滑块。方法是:设置滑块元素的隐藏。

我们使用node.js的puppeteer包。这个包能够对页面元素进行操作。

隐藏滑块的代码是:

await frame_slider.$eval('.tcaptcha-jpp',    (el, value)=> el.setAttribute('style', value),    'visibility: hidden');

然后图像就变成下面的样子了(左侧的滑块消失了)。

大数据中自动化“滑板验证”实现账密登录的解决思路是什么

为了将滑块移动到缺口位置,首先我们要计算缺口位置的坐标。

图像由像素点组成。每个像素点包含三个颜色:红色(Red)、绿色(Green)、蓝色(Blue)。就是通常所说的RGB。后来又增加了一个透明度的标识Alpha。于是每个像素点就有四个值:RGBA。

我们使用getPixels得到图片的像素集合,再转化成Buffer。

const pixels = await util.promisify(getPixels)(path).catch((e) => {console.log('----->e is: ', e)})const buf = Buffer.from(pixels.data);

于是我们就等到了整幅图像的RGBA数据。

本文关键的解决思路如下:

1、取每行每列的RGB值;

2、将每列的RGB值,与其前一列的RGB值比较(得到RGB的差);

3、观察差值的范围,然后取一个可识别出缺口位置的阈值,我取了50;
4、取阈值为50的含义是:当差值大于50的时候,设置标识为1,否则设置标识为0;

5、然后将所有的列的标识(1或 0)相加,得到每列标识的合计数;

6、排名第一和第二的列的列数,就是缺口的左边和右边的位置;

7、列数小的为缺口的左侧,列数大的为缺口的右侧。

8、获得了缺口的位置,将滑块拖动到这个位置,就实现了滑块验证。如下图:

大数据中自动化“滑板验证”实现账密登录的解决思路是什么

到此,滑板验证完成了,即实现了自动化登录。

参考了很多确定图像缺口的代码中,比较多的方法都很难实现近乎100%的准确性。但是上述方法几乎实现。所以这种解决方法值得参考。

完整代码如下:

const getPixels = require("get-pixels");const util = require('util');
(async ()=> {    path = 'images/origin.png';    const pixels = await util.promisify(getPixels)(path).catch((e) => {console.log('----->e is: ', e)})    const buf = Buffer.from(pixels.data);    let bl = buf.toJSON().data.length/4    let btoj = buf.toJSON().data    let buf1 = []    for (var i=0; i<bl; i++) {        var j = i*4        buf1.push(btoj.slice(j,j+4))    }    let slider_bkg_width = 340    let slider_bkg_height = 195    let buf2 = []    for (var i=0; i<slider_bkg_height; i++) {        var j = i*slider_bkg_width        buf2.push(buf1.slice(j,j+slider_bkg_width))    }    let slider_block_height = 68      // 滑块的高度    let slider_bkg_end = 339          // =340-1, 滑板的宽度,从最右侧开始进行扫描    let slider_bkg_top = 64           // 滑板的顶部    let slider_bkg_bottom = 259       // 滑板的底部    let sliger_bkg_height = 195       // 259 - 64    let slider_bkg_half_width = 169   // =340/2-1, 缺口位置一般都是滑板的右半部分,所以扫描结束位置,定在滑板的中线    let col_compu = []    for (var rgba=0; rgba<3; rgba++) {                                           // 一个RGBA单元包含4个元素,循环取前 3 个        for (var t=0; t<sliger_bkg_height; t++) {                                // t 代表每一行,从滑块的 top 位置开始,一共扫描 68 行,也就是滑块的高度            for (var w=slider_bkg_end; w>slider_bkg_half_width; w--) {           // w 代表每一列,从340列开始到170列为止,一共170列,代表从右向左数的滑板宽度的一半                col_compu.push({'col':w,'count':(buf2.slice(t,t+1)[0][w-1][rgba] - buf2.slice(t,t+1)[0][w][rgba])>50?1:0})            }        }    }    var result = {}    // 计算每一列的合计数    col_compu.map(i => result[i.col] = (result[i.col] || 0) + i.count)    // 排序    var keys = Object.keys(result).sort();    var comp = 0    var comp_col = 0    for (var ttt=0; ttt<keys.length; ttt++) {        [comp_col, comp] = result[keys[ttt]] > comp ? [keys[ttt], result[keys[ttt]]] : [comp_col, comp]    }    console.log('----->comp is: ', comp)    console.log('----->comp_col is: ', comp_col)
   var result2 = result    result2[comp_col] = 0    var keys2 = Object.keys(result2).sort();    var comp2 = 0    var comp_col2 = 0    for (var tttt=0; tttt<keys2.length; tttt++) {        [comp_col2, comp2] = result2[keys2[tttt]] > comp2 ? [keys2[tttt], result2[keys2[tttt]]] : [comp_col2, comp2]    }
   let realcol = comp_col<comp_col2?comp_col:comp_col2    console.log('=====----->realcol is: ', realcol)
})();

以上就是大数据中自动化“滑板验证”实现账密登录的解决思路是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI