资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

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

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

十年的海南网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整海南建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“海南网站设计”,“海南网站推广”以来,每个客户项目都认真落实执行。

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

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

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

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

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

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

  • “滑板”是整个图片,

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

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

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

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

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

我们使用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        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        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            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        [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        [comp_col2, comp2] = result2[keys2[tttt]] > comp2 ? [keys2[tttt], result2[keys2[tttt]]] : [comp_col2, comp2]    }
   let realcol = comp_col    console.log('=====----->realcol is: ', realcol)
})();

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


分享文章:大数据中自动化“滑板验证”实现账密登录的解决思路是什么
文章源于:http://cdkjz.cn/article/gpjeje.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220