詳解Selenium-webdriver繞開(kāi)反爬蟲(chóng)機(jī)制的4種方法
之前爬美團(tuán)外賣(mài)后臺(tái)的時(shí)候出現(xiàn)的問(wèn)題,各種方式拖動(dòng)驗(yàn)證碼都無(wú)法成功,包括直接控制拉動(dòng),模擬人工軌跡的隨機(jī)拖動(dòng)都失敗了,最后發(fā)現(xiàn)只要用chrome driver打開(kāi)頁(yè)面,哪怕手動(dòng)登錄也不可以,猜測(cè)driver肯定是直接被識(shí)別出來(lái)了。一開(kāi)始嘗試了改user agent等方式,仍然不行,由于其他項(xiàng)目就擱置了。今天爬淘寶生意參謀又出現(xiàn)這個(gè)問(wèn)題,經(jīng)百度才知道原來(lái)chrome driver的變量有一個(gè)特征碼,網(wǎng)站可以直接根據(jù)特征碼判斷,經(jīng)百度發(fā)現(xiàn)有4種方法可以解決,記錄一下自己做的嘗試。
1、mitproxy攔截請(qǐng)求 √
本質(zhì)上就是在響應(yīng)中利用mitproxy將包含的webdriver的JS中的關(guān)鍵字替換成其他的字符
1.給本機(jī)設(shè)置代理ip 127.0.0.1端口8001(為了讓所有流量走mitmproxy)具體方法請(qǐng)百度。
2.啟動(dòng)mitmproxy。
windows:
mitmdump -p 8001
3.打開(kāi)chrome的開(kāi)發(fā)者工具,查各個(gè).js文件,是否存在driver字樣,最終找到需要的.js文件。
4.干擾腳本
def response(flow):
if '/js/yoda.' in flow.request.url:
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_' ]:
ctx.log.info('Remove "{}" from {}.'.format(
webdriver_key, flow.request.url
))
flow.response.text = flow.response.text.replace('"{}"'.format(webdriver_key), '"NO-SUCH-ATTR"')
flow.response.text = flow.response.text.replace('t.webdriver', 'false')
flow.response.text = flow.response.text.replace('ChromeDriver', '')
5.退出剛才的mitmproxy狀態(tài),重新用命令行啟動(dòng)mitmproxy干擾腳本 監(jiān)聽(tīng)8001端口的請(qǐng)求與響應(yīng)。
mitmdump -s DriverPass.py -p 8001
2、修改源碼 ×
修改js/call_function.js,129行。
var doc = opt_doc || document; var key = '$cdc_asdjflasutopfhvcZLmcfl_'; if (!(key in doc)) doc[key] = new Cache(); return doc[key]; }
–>修改后
function getPageCache(opt_doc) {
var doc = opt_doc || document;
var key = ‘$bobo_zhangyx_';
if (!(key in doc))
doc[key] = new Cache();
return doc[key];
}
經(jīng)測(cè)試似乎已失效,可能由于版本迭代問(wèn)題。
3、手動(dòng)打開(kāi)跑程序√
cmd 運(yùn)行命令
chrome.exe --remote-debugging-port=9222
打開(kāi)一個(gè)瀏覽器,然后py代碼里
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
4、換V63之前的chrome與driver
(似乎也是個(gè)好方法但是沒(méi)有嘗試)
到此這篇關(guān)于詳解Selenium-webdriver繞開(kāi)反爬蟲(chóng)機(jī)制的4種方法的文章就介紹到這了,更多相關(guān)Selenium webdriver 反爬蟲(chóng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python檢查端口是否打開(kāi)的七種方法總結(jié)
在信息安全領(lǐng)域,端口掃描是一項(xiàng)常見(jiàn)的技術(shù),用于逐個(gè)檢測(cè)目標(biāo)主機(jī)上的端口是否開(kāi)放,這篇文章主要給大家介紹了關(guān)于Python檢查端口是否打開(kāi)的七種方法總結(jié),需要的朋友可以參考下2023-12-12
Python實(shí)現(xiàn)操縱控制windows注冊(cè)表的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)操縱控制windows注冊(cè)表的方法,結(jié)合實(shí)例形式分析了Python使用_winreg模塊以及win32api模塊針對(duì)Windows注冊(cè)表操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05
Python 敏感詞過(guò)濾的實(shí)現(xiàn)示例
本文主要介紹了Python 敏感詞過(guò)濾的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算詳解
這篇文章主要介紹了Python深度學(xué)習(xí)關(guān)于pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積的運(yùn)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
python爬蟲(chóng)學(xué)習(xí)筆記--BeautifulSoup4庫(kù)的使用詳解
這篇文章主要介紹了Python中使用Beautiful Soup庫(kù)的超詳細(xì)教程,示例代碼基于Python2.x版本,極力推薦!需要的朋友可以參考下2021-08-08
PyTorch中的神經(jīng)網(wǎng)絡(luò) Mnist 分類(lèi)任務(wù)
這篇文章主要介紹了PyTorch中的神經(jīng)網(wǎng)絡(luò) Mnist 分類(lèi)任務(wù),在本次的分類(lèi)任務(wù)當(dāng)中,我們使用的數(shù)據(jù)集是 Mnist 數(shù)據(jù)集,這個(gè)數(shù)據(jù)集大家都比較熟悉,需要的朋友可以參考下2023-03-03

