亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用 Node.js 模擬滑動拼圖驗證碼操作的示例代碼

2019-11-19 15:00:26
字體:
來源:轉載
供稿:網友

近幾年,網頁上各種新型驗證碼層出不窮,其中一種比較常見的是滑動驗證碼,比如下圖這種。

本文介紹了一種使用純前端方法尋找滑動終點并模擬滑動的方法。

我們需要三個依賴庫: puppeteer 、 Resemble.js 以及canvas 。其中 puppeteer 用于打開并操作頁面, Resemble.jscanvas 用于尋找滑動驗證碼的終點位置。相關依賴如下:

"dependencies": { "canvas": "^1.6.7", "puppeteer": "^0.12.0", "resemblejs": "^2.2.6"}

接下來是實現要點。首先,引入所需的庫,定義一些常量。

const fs = require('fs')const puppeteer = require('puppeteer')const resemble = require('resemblejs')const Canvas = require('canvas')const URL = 'xxx' // 驗證碼頁面訪問地址const width = 600const height = 400const slider_width = 44const sleep = duration => { return new Promise(resolve => { setTimeout(resolve, duration) })}

接下來,使用 puppeteer 打開驗證碼頁面:

const browser = await puppeteer.launch()const page = await browser.newPage()page.setViewport({width, height})await page.goto(URL, { waitUntil: 'networkidle'})

然后往頁面上注入一段 JS ,獲取驗證碼滑塊的位置。這一段代碼可能需要你根據自己頁面的實際情況進行調整。

const offset = await page.evaluate(() => { let offset_ifr = $('iframe').offset() return { top: offset_ifr.top + 222, left: offset_ifr.left + 10 }})

接下來,模擬按下鼠標左鍵,再放開,并分別截圖。

await page.mouse.move(offset.left + 10, offset.top + 10)// 按下鼠標await page.mouse.down({ button: 'left'})// 等待圖片出現await sleep(500)// 截圖await page.screenshot({path: 'screenshot2.png'})await page.mouse.up({ button: 'left'})// 等待圖片出現await sleep(500)// 截圖await page.screenshot({path: 'screenshot3.png'})

此時可以得到兩個圖片:

以及:

可以看到,兩個圖其余部分都相同,區別在于是否顯示驗證碼滑塊以及目標位置。

接下來,就輪到 Resemble.js 出場了,可以使用它獲得兩個圖片的 diff 結果。

await new Promise(resolve => { resemble.outputSettings({ transparency: 0 }) resemble('screenshot2.png') .compareTo('screenshot3.png') .ignoreColors() .onComplete(data => {  fs.writeFileSync('diff.png', data.getBuffer())  resolve() })})

結果如下:

接下來,再使用 canvas 庫,將這個 diff 圖片讀入內存,從右上角開始查找,很容易即可找到最右側色塊的位置,也即滑塊終點的位置。

const getDestinationX = min_x => { const canvas = new Canvas(width, height) const ctx = canvas.getContext('2d') const buf = fs.readFileSync('diff.png') const img = new Canvas.Image() img.src = buf ctx.drawImage(img, 0, 0, width, height) const img_data = ctx.getImageData(0, 0, width, height).data let destination_x = -1 for (let y = 0; y < height; y++) { for (let x = width; x >= min_x; x--) {  let p = width * y + x  p = p << 2  if (img_data[p + 3] === 255 && img_data[p - 10 * 4 + 3] === 255) {  destination_x = x  break  } } if (destination_x > -1) break } return destination_x - slider_width}

這樣,便獲得了滑塊的起始位置以及終點位置,再使用 puppeteerpage.mouse.move 方法模擬拖動,將滑塊拖到終點位置即可。

當然,找到滑塊終點并把滑塊拖到正確的終點位置只是第一步,完善的滑動驗證碼并不會只判斷有沒有滑到正確的位置,還會分析你的拖動軌跡。要知道,人滑動的軌跡和機器滑動的軌跡是有很大不同的,至于具體如何區分就是另一個復雜的話題了。

最后,本文僅供研究參考,不要問我要詳細代碼。以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av在线免费观看| 日本精品中文字幕| 亚洲欧洲黄色网| 一区二区三区视频免费| 日韩中文字幕国产| 97激碰免费视频| 久久精品亚洲热| 国内精品久久影院| 黄色一区二区在线观看| 色妞色视频一区二区三区四区| 午夜精品久久久久久久99热| 国产精品久久久久一区二区| 国产亚洲欧洲高清| 亚洲跨种族黑人xxx| 亚洲成色777777在线观看影院| 国产精品jvid在线观看蜜臀| 麻豆国产精品va在线观看不卡| 色综合久久精品亚洲国产| 亚洲国产私拍精品国模在线观看| 91香蕉嫩草神马影院在线观看| 亚洲精品av在线播放| www国产精品视频| 96精品久久久久中文字幕| 国产精品福利网站| 亚洲第一天堂无码专区| 亚洲人成在线观| 国外成人在线播放| 国产成人综合亚洲| 久久久久国产精品免费| 国产精品成人观看视频国产奇米| 日韩精品视频在线| 亚洲国产精品电影| 欧美一级高清免费播放| 日韩专区中文字幕| 欧美日韩国产黄| 中文在线资源观看视频网站免费不卡| 国产精品视频免费在线| 欧美日韩国产区| 青青久久av北条麻妃黑人| 欧美成人剧情片在线观看| 欧美精品久久一区二区| 国产黑人绿帽在线第一区| www.日本久久久久com.| 亚洲大胆人体在线| 欧美日韩国产999| 亚洲视频自拍偷拍| 日韩亚洲综合在线| 久久久久国产视频| 蜜月aⅴ免费一区二区三区| 欧美在线观看视频| 国产精品美女视频网站| 色av中文字幕一区| 亚洲国产精品va在线观看黑人| 欧美亚洲国产日韩2020| 91精品国产高清自在线| 国产一区二区三区高清在线观看| 91精品国产色综合久久不卡98口| 91夜夜揉人人捏人人添红杏| 亚洲а∨天堂久久精品9966| 欧美日本啪啪无遮挡网站| 一本大道久久加勒比香蕉| 精品在线观看国产| 96国产粉嫩美女| 欧美性理论片在线观看片免费| 亚洲女人初尝黑人巨大| 亚洲男女自偷自拍图片另类| 久久久久日韩精品久久久男男| 91av在线国产| 国产精品视频网站| 国产精品女主播视频| 国语对白做受69| 日韩在线免费高清视频| 久久久国产一区二区三区| 欧美成人手机在线| 911国产网站尤物在线观看| 久久久亚洲影院你懂的| 欧美色videos| 欧美激情免费观看| 成人国产亚洲精品a区天堂华泰| 亚洲精品中文字| 国产日韩一区在线| 国产精品久久综合av爱欲tv| 亚洲3p在线观看| 欧美在线观看www| 国产精品爽黄69天堂a| 亚洲精品成人免费| 亚洲成人av资源网| 欧美激情第1页| 欧美影院成年免费版| 国产精品免费观看在线| 亚洲国产日韩欧美在线99| 国产成人精品a视频一区www| 欧美中文字幕在线播放| 国产精品日日做人人爱| 亚洲视频在线免费看| 精品久久久久久中文字幕一区奶水| 亚洲欧洲av一区二区| 欧美日韩中文在线| 深夜福利一区二区| 亚洲午夜女主播在线直播| 日韩精品欧美国产精品忘忧草| 国内精品久久久久久中文字幕| 亚洲人成77777在线观看网| 美女av一区二区三区| 久久亚洲精品国产亚洲老地址| 国产噜噜噜噜噜久久久久久久久| 成人中心免费视频| 亚洲成人黄色在线| 97视频在线看| 亚洲国产天堂久久综合| 国产+人+亚洲| 国产精品视频精品视频| 在线观看中文字幕亚洲| 日韩中文av在线| 中文字幕成人精品久久不卡| 久久精品国产亚洲精品| 亚洲第一页在线| 黑人巨大精品欧美一区二区三区| 亚洲国产天堂网精品网站| 亚洲人成绝费网站色www| 精品国产31久久久久久| 国产+成+人+亚洲欧洲| 91精品视频在线看| 九九精品视频在线观看| 国产精品亚洲视频在线观看| 国产精品视频网站| 97在线视频免费播放| 日本精品中文字幕| 亚洲黄色av女优在线观看| 国产精品扒开腿做爽爽爽男男| 亚洲自拍高清视频网站| 久久精品色欧美aⅴ一区二区| 日韩中文字幕国产精品| 亚洲精品欧美日韩| 精品av在线播放| 日韩电影在线观看永久视频免费网站| 日韩av一卡二卡| 国产99在线|中文| 在线精品播放av| 在线看欧美日韩| 91精品视频免费看| 欧美精品激情在线观看| 亚洲第一视频在线观看| 国产成人涩涩涩视频在线观看| 日韩激情视频在线播放| 日韩免费观看高清| 日韩中文字幕精品| 中文字幕亚洲欧美日韩在线不卡| www.日韩系列| 成人免费激情视频| 2019中文在线观看| 91av中文字幕| 久久在线免费观看视频| 国产精品视频在线观看| 国产日产久久高清欧美一区| 国产日韩欧美成人| 国产精品久久久久久久久粉嫩av| 亚洲人精选亚洲人成在线| 久99九色视频在线观看| 91精品国产91久久久久久| 亚洲男女性事视频| 亚洲综合精品一区二区| 国产成人精品av| 日本久久久久亚洲中字幕|