運用phantomjs無頭瀏覽器破解四種反爬蟲技術

路易十四發表於2016-09-13

在與反爬蟲的對抗中,我們爬蟲的大招有兩個,其一是多種ip跟換方式(例如adsl|代理|tor等請參看之前的文章)。其二是無頭瀏覽器,使用自動化的技術來進行自動資料抓取,模擬滑鼠與鍵盤事件,可以用於破解驗證碼,js解析,詭異的模糊資料這型別的反爬蟲技術。

1 phantomjs原理說明:

無頭瀏覽器不是什麼鬧鬼的東西,他也稱為無介面瀏覽器,他本身是用來做自動化測試的,不過似乎更適合用來搞爬蟲。他的官方網址是:http://phantomjs.org/quick-start.html 如果想看他的中文api的話我整理了一份資料在:這裡

下載之後會得到個一個exe檔案,linux下也一樣。在命令列則是在該檔案的目錄下輸入 phantomjs  就算是用該瀏覽器啟動你的爬蟲程式碼。

 

2  牛刀小試

下列js程式碼就是需要執行phantomg

儲存為request.js檔案。然後在當前目錄下命令列執行:就會返回整個網頁的原始碼,然後爬蟲你懂得的小解析一下就可以抽取出xici代理的免費ip了。

如圖:2016-09-12-19-17-38%e5%b1%8f%e5%b9%95%e6%88%aa%e5%9b%be

 

3 破解基礎的js解析能力限制

遇到過兩種其一是該網站故意用js做了延遲返回真實資料,先返回一部分,之後再進行幾秒的js能力驗證後載入。另外一種則檢測是無js處理能力當即就給出拒絕碼,這型別就是xici代理的方式,如果你用python直接傳送請求,無論是scrapy還是requests,都會返回500錯誤。如下:

2016-09-12-19-34-05%e5%b1%8f%e5%b9%95%e6%88%aa%e5%9b%be

但是如果你使用上面牛刀小試的程式碼,在python中用系統指令呼叫這行命令,則相當於用phantomjs來執行請求操作,原始碼就會直接返回。可以用python用下列


之後就是字串處理,很簡單不廢話了。

 

4 破解採用display:none來隨機化網頁原始碼

總所周知,我們在爬蟲中想要選出某個需要的資料,可以使用xpath或者正則這類字串的操作,然而必然需要對方的網站有一定規律,才能合理的抽出資料,因此也有使用nodisplay這個屬性,讓顯示的後臺程式碼十分混亂,但是前臺呈現給使用者的資料並不會混亂比如:http://proxy.goubanjia.com/

如圖,我使用chrome來檢測這ip部分的原始碼的時候就會出現後臺亂七八糟的顯示情況,有網站還會隨機類的名字,讓更加不好捕捉。

2016-09-13-10-45-33%e5%b1%8f%e5%b9%95%e6%88%aa%e5%9b%be   2016-09-13-10-45-51%e5%b1%8f%e5%b9%95%e6%88%aa%e5%9b%be

然後破解方式也曲線救國。

破解思路:(避免查水錶不釋出原始碼)

使用phantomjs的截圖功能。(具體查官方api。並不困難,其樣例程式碼中rasterize.js 這一篇也是實現截圖的功能)例如:

然後單獨取出ip和port部分的圖片。使用python進行圖文轉換。大致如下:

  1. 安裝PIL中image庫
  2. 遍歷每一個畫素點,做一個銳化加強對比去除雜色和二值化,儲存改良過的圖片。
  3. 呼叫pytesseract 執行函式:print pytesseract.image_to_string(Image.open(‘end.png’))
  4. 如果你的影象處理的比較清晰就可以輕鬆識別出圖文。

注意好切割圖片,不要整個圖片一次性的識別,最好能單獨切出一個ip。然後進行識別,準確性高。主要的難度其實是安裝環境和圖片優化比較麻煩。

 

5 破解簡單的圖片文字相互替代

這部分和上個問題也相當重合:相當於是對方把一些資料變成圖片,而我們則是下載這些圖片然後進行圖片優化,然後解析比如:http://ip.zdaye.com/

當抓取他的頁面的時候,ip好抓,但是埠號是圖片的。下載圖片之後還是需要做好上訴轉換。識別起來準確性也是95%+

2016-09-13-11-04-06%e5%b1%8f%e5%b9%95%e6%88%aa%e5%9b%be  2016-09-13-11-04-17%e5%b1%8f%e5%b9%95%e6%88%aa%e5%9b%be

這方面給三個傳送門自行學習:

  • 簡單數字去噪二值化識別:http://www.verydemo.com/demo_c122_i2907.html
  • 驗證碼破解原理:http://udn.yyuap.com/doc/ae/920457.html
  • 機器學習式破解:https://www.91ri.org/13043.html

 

6 破解拖動驗證碼

破解只是興趣而已,總不能砸別人飯碗。只是提一下思路:

  1. 擷取觸發前後的驗證碼圖片。運用變化點作為二值化可以得出需要偏移的畫素點
  2. phantomjs控制滑鼠進行拖動
  3. 唯一困難的就是拖動的軌跡不能是太機器化,否則你的驗證碼會被吃掉。
  4. 還有別人使用ajax等跳過請求,也是一種方式不過也挺難的。
  5. 請勿私信問程式碼。沒留。

jietu_2 jietu_3 jietu_5

 

7 總結:

與反爬蟲進行鬥爭,如果你能熟練使用上訴的技巧就基本無往而不利了。

使用adsl | tor | 代理 | 可以讓對方無法針對ip封禁,使用header的欄位偽造,算是入門防止對方識別並返回假資料。使用phantoms則基本對方不能阻止你的訪問。畢竟是真實的瀏覽器發起的請求。現在還能存在的漏洞就是可以通過一些特性檢測識別出你使用的是phantoms瀏覽器然後阻止,能實現這個的網站也不多。另外還有困難的就是複雜的驗證碼破解的,只有機器學習一條路了。

本文僅作技術分享,不公佈破解原始碼,希望讀者可以互相學習,增長技藝。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

運用phantomjs無頭瀏覽器破解四種反爬蟲技術

相關文章