(國家電網淮北分公司 安徽 淮北 235000)
網絡爬蟲是一種按照編寫者自己的規則自動的抓取目標網頁信息的技術,多為腳本語言。目前網絡爬蟲已經成為了一種很成熟的獲取他人信息的技術,很多商業公司都會通過網絡爬蟲對競爭對手或者社交網絡進行爬取,從而有效的獲取信息,進行商業抉擇[1]。常見的反爬蟲措施有:IP封禁、滑動驗證碼、點觸驗證碼、動態網頁加載等,其中以驗證碼為主要反爬手段[2]。
為了應對這些反爬方法,我們需要進行有效的措施從而進行高效率的網絡信息爬取。
滑動驗證碼的核心思想:1.后端隨機生成一個帶有缺口的圖片,圖片上缺口位置隨機,后臺保存缺口的位置坐標。2.前端通過滑動滑塊實現人機交互,將滑塊滑動到缺口處,獲得用戶滑動滑塊的距離值。
接下來通過方法步驟和程序介紹兩方面介紹滑動驗證碼圖片對比法。
(一)圖片對比法步驟
圖片對比分為以下幾個步驟:(1)獲取第一次驗證碼截圖PNG1;(2)刷新驗證碼,獲取第二次驗證碼截圖PNG2;(3)將兩次滑動驗證碼的圖片進行對比,找出缺口位置;(4)測試出成功率高的滑塊加速度,計算出滑動軌跡;(5)程序控制鼠標沿著軌跡滑動,完成滑動驗證碼認證。
(二)滑動驗證碼程序介紹
滑動驗證碼程序主要由四個部分組成,截取驗證碼圖片、定位缺口位置、描繪軌跡和滑動滑塊。
1.截取驗證碼圖片
程序的第一步,是要得到驗證碼圖片在瀏覽器頁面中的相對位置,然后對其進行截取。通過分析網頁找到驗證碼圖片屬性“verify-img-panel”,定位驗證碼圖片,聲明驗證碼圖片img。使用img.size得到圖片尺寸,可以得到img的長和寬,這里分別使用height和width定義。使用img.location聲明location對象,使用location[]計算驗證碼圖片頂部到達瀏覽器頁面頂端的距離定義其為top,計算驗證碼圖片左邊的邊到達瀏覽器頁面左邊的距離定義其為left,使用top加上height就可以得到驗證碼圖片底端到瀏覽頂部的距離,使用left加上width就可以得到驗證碼圖片右邊的邊距離瀏覽器左邊的距離。通過這種方式無論每次滑動驗證碼的圖片在哪個位置彈出,都可以準確的得到驗證碼圖片在瀏覽器中的相對位置[3-4]。
在得到驗證碼圖片的相對位置坐標即 top、bottom、left、right的值之后就開始對驗證碼圖片進行截圖,使用browser.get_screenshot_as_png()定義保存的圖片為PNG格式,使用screenshot.crop()和top、bottom、left、right的值截取圖片,命名為PNG1。分析驗證碼圖片右上角的刷新按鈕得到他的屬性“icon-refresh”,使用click()函數點擊,刷新驗證碼圖片,重復以上步驟一次得到PNG2;
2.定位缺口位置
在得到兩張驗證碼圖片后接下來就要開始定位缺口位置。在這里通過對兩張圖進行從上到下,從左到右的像素對比。分析滑塊可以得到滑塊的長度為32像素,因此兩張圖片的橫坐標從32開始比對,當像素對比差超過閾值時,返回當前橫坐標X1。橫坐標的位置就是缺口左邊的邊橫坐標,橫坐標的值作為滑塊滑動的距離distance。
3.描繪軌跡
在得到需要滑塊移動的距離后,接下來需要繪制滑塊滑動的軌跡。滑塊滑動的速度快與慢,以及誤差值都會影響是否被網站判定為機器操作,因此需要分析人滑動的習慣,且滑動習慣與缺口位置有關。若缺口距離滑塊較近,會出現兩種情況,一種是開始滑塊加速,當滑塊到達缺口處時猛然停止,且缺口與滑塊之間的誤差較大,第二種是滑塊勻速滑動,到達缺口處停止,缺口與滑塊之間的誤差較小。若缺口距離滑塊適中或較遠,則滑塊加速較為平穩,到達mid處開始平穩減速,最終缺口與滑塊之間的誤差較小。
在mid處之前,滑塊滑動為加速過程,mid之后滑塊為減速過程,每隔0.2s記錄一次滑塊當前橫坐標,將其存入到列表track中,當做軌跡。
4.滑動滑塊
在得到滑塊的軌跡后,沿著軌跡滑動滑塊。分析網頁得到滑動條的屬性“verify-move-block”,編寫ActionChains()動作列表控制鼠標沿著track中的橫坐標滑動滑塊,完成滑動驗證碼的認證。
在代碼開始運行后,后臺會運行Firefox瀏覽器,并自動在地址欄內輸入目標爬取網址,本實驗對網站“http://qiye.zhaoyoung.top/login.php”爬取[5]。分析完成驗證碼在瀏覽器頁面的相對位置后,程序會將驗證碼圖片截取下來,作為PNG1。在得到PNG1后通過驗證碼使用刷新操作,再次得到一張驗證碼作為PNG2,兩張圖片如圖4.1所示,分別為PNG1與PNG2。

圖4.1 PNG1與PNG2
接下來程序會得到缺口位置,程序控制滑塊沿著軌跡滑動到缺口處,完成認證,如圖4.2所示。
圖片對比法用于滑動驗證碼與點觸驗證碼。滑動驗證碼圖片對比認證思路為定位滑動驗證碼圖片在瀏覽器中的相對位置,保證了無論圖片在哪彈出都可以準確獲取圖片。截取滑動驗證碼圖片,刷新驗證碼得到第二張滑動驗證碼圖片,將兩張驗證碼圖片進行比對找出缺口的坐標,經實驗得到當前滑動驗證碼最佳加速度與減速點mid,繪制軌跡并將滑塊沿著軌跡滑動完成認證,認證率較高。