中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

大數據中自動化“滑板驗證”實現賬密登錄的解決思路是什么

發布時間: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

札达县| 邵东县| 龙川县| 灯塔市| 贡觉县| 保山市| 临沧市| 搜索| 巴楚县| 武邑县| 垣曲县| 茂名市| 西盟| 永定县| 长顺县| 武清区| 金寨县| 安仁县| 南华县| 基隆市| 临江市| 江陵县| 东方市| 新平| 望谟县| 河西区| 洛扎县| 雷波县| 弥勒县| 洪湖市| 垣曲县| 贺州市| 泰兴市| 麻阳| 罗定市| 浙江省| 万州区| 辽源市| 徐闻县| 永济市| 龙口市|