免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

如何突破網站對selenium的屏蔽-創新互聯

這篇文章主要介紹如何突破網站對selenium的屏蔽,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創新互聯公司專注于企業全網營銷推廣、網站重做改版、奎屯網站定制設計、自適應品牌網站建設、H5技術購物商城網站建設、集團公司官網建設、成都外貿網站建設公司、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為奎屯等各大城市提供網站開發制作服務。

使用selenium模擬瀏覽器進行數據抓取無疑是當下最通用的數據采集方案,它通吃各種數據加載方式,能夠繞過客戶JS加密,繞過爬蟲檢測,繞過簽名機制。它的應用,使得許多網站的反采集策略形同虛設。由于selenium不會在HTTP請求數據中留下指紋,因此無法被網站直接識別和攔截。

這是不是就意味著selenium真的就無法被網站屏蔽了呢?非也。selenium在運行的時候會暴露出一些預定義的Javascript變量(特征字符串),例如"window.navigator.webdriver",在非selenium環境下其值為undefined,而在selenium環境下,其值為true(如下圖所示為selenium驅動下Chrome控制臺打印出的值)。

如何突破網站對selenium的屏蔽

除此之外,還有一些其它的標志性字符串(不同的瀏覽器可能會有所不同),常見的特征串如下所示:

  1. webdriver  

  2. __driver_evaluate  

  3. __webdriver_evaluate  

  4. __selenium_evaluate  

  5. __fxdriver_evaluate  

  6. __driver_unwrapped  

  7. __webdriver_unwrapped  

  8. __selenium_unwrapped  

  9. __fxdriver_unwrapped  

  10. _Selenium_IDE_Recorder  

  11. _selenium  

  12. calledSelenium  

  13. _WEBDRIVER_ELEM_CACHE  

  14. ChromeDriverw  

  15. driver-evaluate  

  16. webdriver-evaluate  

  17. selenium-evaluate  

  18. webdriverCommand  

  19. webdriver-evaluate-response  

  20. __webdriverFunc  

  21. __webdriver_script_fn  

  22. __$webdriverAsyncExecutor  

  23. __lastWatirAlert  

  24. __lastWatirConfirm  

  25. __lastWatirPrompt  

  26. $chrome_asyncScriptInfo  

  27. $cdc_asdjflasutopfhvcZLmcfl_  

了解了這個特點之后,就可以在瀏覽器客戶端JS中通過檢測這些特征串來判斷當前是否使用了selenium,并將檢測結果附加到后續請求之中,這樣服務端就能識別并攔截后續的請求。

下面講一個具體的例子。

鯤之鵬的技術人員近期就發現了一個能夠有效檢測并屏蔽selenium的網站應用:大眾點評網的驗證碼表單頁,如果是正常的瀏覽器操作,能夠有效的通過驗證,但如果是使用selenium就會被識別,即便驗證碼輸入正確,也會被提示“請求異常,拒絕操作”,無法通過驗證(如下圖所示)。

如何突破網站對selenium的屏蔽

分析頁面源碼,可以找到 https://static.meituan.net/bs/yoda-static/file:file/d/js/yoda.e6e7c3988817eb17.js 這個JS文件,將代碼格式化后,搜索webdriver可以看到如下代碼:

如何突破網站對selenium的屏蔽

 可以看到它檢測了"webdriver", "__driver_evaluate", "__webdriver_evaluate"等等這些selenium的特征串。提交驗證碼的時候抓包可以看到一個_token參數(很長),selenium檢測結果應該就包含在該參數里,服務端借以判斷“請求異常,拒絕操作”。

現在才進入正題,如何突破網站的這種屏蔽呢?

我們已經知道了屏蔽的原理,只要我們能夠隱藏這些特征串就可以了。但是還不能直接刪除這些屬性,因為這樣可能會導致selenium不能正常工作了。我們采用曲線救國的方法,使用中間人代理,比如fidder, proxy2.py或者mitmproxy,將JS文件(本例是yoda.*.js這個文件)中的特征字符串給過濾掉(或者替換掉,比如替換成根本不存在的特征串),讓它無法正常工作,從而達到讓客戶端腳本檢測不到selenium的效果。

下面我們驗證下這個思路。這里我們使用mitmproxy實現中間人代理),對JS文件(本例是yoda.*.js這個文件)內容進行過濾。啟動mitmproxy代理并加載response處理腳本:

  1. mitmdump.exe -S modify_response.py  

其中modify_response.py腳本如下所示:

view plain copy to clipboard print ?

  1. # coding: utf-8  

  2. # modify_response.py  

  3.   

  4. import re  

  5. from mitmproxy import ctx  

  6.     

  7. def response(flow):  

  8.   """修改應答數據 

  9.   """  

  10.   if '/js/yoda.' in flow.request.url:  

  11.       # 屏蔽selenium檢測  

  12.       for webdriver_key in ['webdriver', '__driver_evaluate', '__webdriver_evaluate', '__selenium_evaluate', '__fxdriver_evaluate', '__driver_unwrapped', '__webdriver_unwrapped', '__selenium_unwrapped', '__fxdriver_unwrapped', '_Selenium_IDE_Recorder', '_selenium', 'calledSelenium', '_WEBDRIVER_ELEM_CACHE', 'ChromeDriverw', 'driver-evaluate', 'webdriver-evaluate', 'selenium-evaluate', 'webdriverCommand', 'webdriver-evaluate-response', '__webdriverFunc', '__webdriver_script_fn', '__$webdriverAsyncExecutor', '__lastWatirAlert', '__lastWatirConfirm', '__lastWatirPrompt', '$chrome_asyncScriptInfo', '$cdc_asdjflasutopfhvcZLmcfl_']:  

  13.           ctx.log.info('Remove "{}" from {}.'.format(webdriver_key, flow.request.url))  

  14.           flow.response.text = flow.response.text.replace('"{}"'.format(webdriver_key), '"NO-SUCH-ATTR"')  

  15.       flow.response.text = flow.response.text.replace('t.webdriver', 'false')  

  16.       flow.response.text = flow.response.text.replace('ChromeDriver', '')  

在selnium中使用該代理(mitmproxy默認監聽127.0.0.1:8080)訪問目標網站,mitmproxy將過濾JS中的特征符串,如下圖所示:

如何突破網站對selenium的屏蔽

以上是“如何突破網站對selenium的屏蔽”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創新互聯-成都網站建設公司行業資訊頻道!

分享文章:如何突破網站對selenium的屏蔽-創新互聯
標題URL:http://m.newbst.com/article14/dodcde.html

成都網站建設公司_創新互聯,為您提供網站制作Google企業建站網站設計公司網站收錄定制開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設