真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何突破網(wǎng)站對(duì)selenium的屏蔽-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、奎屯網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為奎屯等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

使用selenium模擬瀏覽器進(jìn)行數(shù)據(jù)抓取無(wú)疑是當(dāng)下最通用的數(shù)據(jù)采集方案,它通吃各種數(shù)據(jù)加載方式,能夠繞過(guò)客戶(hù)JS加密,繞過(guò)爬蟲(chóng)檢測(cè),繞過(guò)簽名機(jī)制。它的應(yīng)用,使得許多網(wǎng)站的反采集策略形同虛設(shè)。由于selenium不會(huì)在HTTP請(qǐng)求數(shù)據(jù)中留下指紋,因此無(wú)法被網(wǎng)站直接識(shí)別和攔截。

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

如何突破網(wǎng)站對(duì)selenium的屏蔽

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

  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_  

了解了這個(gè)特點(diǎn)之后,就可以在瀏覽器客戶(hù)端JS中通過(guò)檢測(cè)這些特征串來(lái)判斷當(dāng)前是否使用了selenium,并將檢測(cè)結(jié)果附加到后續(xù)請(qǐng)求之中,這樣服務(wù)端就能識(shí)別并攔截后續(xù)的請(qǐng)求。

下面講一個(gè)具體的例子。

鯤之鵬的技術(shù)人員近期就發(fā)現(xiàn)了一個(gè)能夠有效檢測(cè)并屏蔽selenium的網(wǎng)站應(yīng)用:大眾點(diǎn)評(píng)網(wǎng)的驗(yàn)證碼表單頁(yè),如果是正常的瀏覽器操作,能夠有效的通過(guò)驗(yàn)證,但如果是使用selenium就會(huì)被識(shí)別,即便驗(yàn)證碼輸入正確,也會(huì)被提示“請(qǐng)求異常,拒絕操作”,無(wú)法通過(guò)驗(yàn)證(如下圖所示)。

如何突破網(wǎng)站對(duì)selenium的屏蔽

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

如何突破網(wǎng)站對(duì)selenium的屏蔽

 可以看到它檢測(cè)了"webdriver", "__driver_evaluate", "__webdriver_evaluate"等等這些selenium的特征串。提交驗(yàn)證碼的時(shí)候抓包可以看到一個(gè)_token參數(shù)(很長(zhǎng)),selenium檢測(cè)結(jié)果應(yīng)該就包含在該參數(shù)里,服務(wù)端借以判斷“請(qǐng)求異常,拒絕操作”。

現(xiàn)在才進(jìn)入正題,如何突破網(wǎng)站的這種屏蔽呢?

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

下面我們驗(yàn)證下這個(gè)思路。這里我們使用mitmproxy實(shí)現(xiàn)中間人代理),對(duì)JS文件(本例是yoda.*.js這個(gè)文件)內(nèi)容進(jìn)行過(guò)濾。啟動(dòng)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.   """修改應(yīng)答數(shù)據(jù) 

  9.   """  

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

  11.       # 屏蔽selenium檢測(cè)  

  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默認(rèn)監(jiān)聽(tīng)127.0.0.1:8080)訪(fǎng)問(wèn)目標(biāo)網(wǎng)站,mitmproxy將過(guò)濾JS中的特征符串,如下圖所示:

如何突破網(wǎng)站對(duì)selenium的屏蔽

以上是“如何突破網(wǎng)站對(duì)selenium的屏蔽”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!


當(dāng)前題目:如何突破網(wǎng)站對(duì)selenium的屏蔽-創(chuàng)新互聯(lián)
本文URL:http://weahome.cn/article/dodcde.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部