成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一行js代碼識別Selenium+Webdriver及其應(yīng)對方案

andycall / 3361人閱讀

摘要:截至年月日分,本文所講的方法可以用來登錄知乎。如果使用直接登錄知乎,會(huì)彈出驗(yàn)證碼先使用本文的方法再登錄知乎,能夠成功偽裝成真實(shí)的瀏覽器,不會(huì)彈出驗(yàn)證碼。實(shí)際上,能被識別的特征不止這一個(gè)。

有不少朋友在開發(fā)爬蟲的過程中喜歡使用Selenium + Chromedriver,以為這樣就能做到不被網(wǎng)站的反爬蟲機(jī)制發(fā)現(xiàn)。

先不說淘寶這種基于用戶行為的反爬蟲策略,僅僅是一個(gè)普通的小網(wǎng)站,使用一行Javascript代碼,就能輕輕松松識別你是否使用了Selenium + Chromedriver模擬瀏覽器。

我們來看一個(gè)例子。

使用下面這一段代碼啟動(dòng)Chrome窗口:

from selenium.webdriver import Chrome

driver = Chrome()

現(xiàn)在,在這個(gè)窗口中打開開發(fā)者工具,并定位到Console選項(xiàng)卡,如下圖所示。

現(xiàn)在,在這個(gè)窗口輸入如下的js代碼并按下回車鍵:

window.navigator.webdriver

可以看到,開發(fā)者工具返回了true。如下圖所示。

但是,如果你打開一個(gè)普通的Chrome窗口,執(zhí)行相同的命令,可以發(fā)現(xiàn)這行代碼的返回值為undefined,如下圖所示。

所以,如果網(wǎng)站通過js代碼獲取這個(gè)參數(shù),返回值為undefined說明是正常的瀏覽器,返回true說明用的是Selenium模擬瀏覽器。一抓一個(gè)準(zhǔn)。這里給出一個(gè)檢測Selenium的js代碼例子:

webdriver = window.navigator.webdriver;
if(webdriver){
    console.log("你這個(gè)傻逼你以為使用Selenium模擬瀏覽器就可以了?")
} else {
    console.log("正常瀏覽器")
}

網(wǎng)站只要在頁面加載的時(shí)候運(yùn)行這個(gè)js代碼,就可以識別訪問者是不是用的Selenium模擬瀏覽器。如果是,就禁止訪問或者觸發(fā)其他反爬蟲的機(jī)制。

那么對于這種情況,在爬蟲開發(fā)的過程中如何防止這個(gè)參數(shù)告訴網(wǎng)站你在模擬瀏覽器呢?

可能有一些會(huì)js的朋友覺得可以通過覆蓋這個(gè)參數(shù)從而隱藏自己,但實(shí)際上這個(gè)值是不能被覆蓋的:

對js更精通的朋友,可能會(huì)使用下面這一段代碼來實(shí)現(xiàn):

Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});

運(yùn)行效果如下圖所示:

確實(shí)修改成功了。這種寫法就萬無一失了嗎?并不是這樣的,如果此時(shí)你在模擬瀏覽器中通過點(diǎn)擊鏈接、輸入網(wǎng)址進(jìn)入另一個(gè)頁面,或者開啟新的窗口,你會(huì)發(fā)現(xiàn),window.navigator.webdriver又變成了true。如下圖所示。

那么是不是可以在每一個(gè)頁面都打開以后,再次通過webdriver執(zhí)行上面的js代碼,從而實(shí)現(xiàn)在每個(gè)頁面都把window.navigator.webdriver設(shè)置為undefined呢?也不行。

因?yàn)楫?dāng)你執(zhí)行:driver.get(網(wǎng)址)的時(shí)候,瀏覽器會(huì)打開網(wǎng)站,加載頁面并運(yùn)行網(wǎng)站自帶的js代碼。所以在你重設(shè)window.navigator.webdriver之前,實(shí)際上網(wǎng)站早就已經(jīng)知道你是模擬瀏覽器了。

接下來,又有朋友提出,可以通過編寫Chrome插件來解決這個(gè)問題,讓插件里面的js代碼在網(wǎng)站自帶的所有js代碼之前執(zhí)行。

這樣做當(dāng)然可以,不過有更簡單的辦法,只需要設(shè)置Chromedriver的啟動(dòng)參數(shù)即可解決問題。

在啟動(dòng)Chromedriver之前,為Chrome開啟實(shí)驗(yàn)性功能參數(shù)excludeSwitches,它的值為["enable-automation"],完整代碼如下:

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_experimental_option("excludeSwitches", ["enable-automation"])
driver = Chrome(options=option)

此時(shí)啟動(dòng)的Chrome窗口,在右上角會(huì)彈出一個(gè)提示,不用管它,不要點(diǎn)擊停用按鈕。

再次在開發(fā)者工具的Console選項(xiàng)卡中查詢window.navigator.webdriver,可以發(fā)現(xiàn)這個(gè)值已經(jīng)自動(dòng)變成undefined了。并且無論你打開新的網(wǎng)頁,開啟新的窗口還是點(diǎn)擊鏈接進(jìn)入其他頁面,都不會(huì)讓它變成true。運(yùn)行效果如下圖所示。

截至2019年02月12日20:46分,本文所講的方法可以用來登錄知乎。如果使用 Selenium 直接登錄知乎,會(huì)彈出驗(yàn)證碼;先使用本文的方法再登錄知乎,能夠成功偽裝成真實(shí)的瀏覽器,不會(huì)彈出驗(yàn)證碼。

實(shí)際上,Selenium + Webdriver能被識別的特征不止這一個(gè)。關(guān)于如何隱藏其他特征,請關(guān)注我的微信公眾號。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101629.html

相關(guān)文章

  • 一行js代碼識別Selenium+Webdriver及其應(yīng)對方案

    摘要:截至年月日分,本文所講的方法可以用來登錄知乎。如果使用直接登錄知乎,會(huì)彈出驗(yàn)證碼先使用本文的方法再登錄知乎,能夠成功偽裝成真實(shí)的瀏覽器,不會(huì)彈出驗(yàn)證碼。實(shí)際上,能被識別的特征不止這一個(gè)。 有不少朋友在開發(fā)爬蟲的過程中喜歡使用Selenium + Chromedriver,以為這樣就能做到不被網(wǎng)站的反爬蟲機(jī)制發(fā)現(xiàn)。 先不說淘寶這種基于用戶行為的反爬蟲策略,僅僅是一個(gè)普通的小網(wǎng)站,使用一行...

    Tamic 評論0 收藏0
  • 爬蟲攻防實(shí)踐

    摘要:之前在學(xué)校曾經(jīng)用過的方法做過一些爬蟲腳本來玩,從正式轉(zhuǎn)前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐。爬蟲腳本通常會(huì)很頻繁的進(jìn)行網(wǎng)絡(luò)請求,比如要爬取豆瓣排行榜的電影,就會(huì)連續(xù)發(fā)送個(gè)網(wǎng)絡(luò)請求。 之前在學(xué)校曾經(jīng)用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉(zhuǎn)前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐...

    wanglu1209 評論0 收藏0
  • 爬蟲攻防實(shí)踐

    摘要:之前在學(xué)校曾經(jīng)用過的方法做過一些爬蟲腳本來玩,從正式轉(zhuǎn)前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐。爬蟲腳本通常會(huì)很頻繁的進(jìn)行網(wǎng)絡(luò)請求,比如要爬取豆瓣排行榜的電影,就會(huì)連續(xù)發(fā)送個(gè)網(wǎng)絡(luò)請求。 之前在學(xué)校曾經(jīng)用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉(zhuǎn)前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐...

    xiangzhihong 評論0 收藏0
  • Python 從零開始爬蟲(八)——?jiǎng)討B(tài)爬取解決方案selenium

    摘要:然而讓蟲師們垂涎的并不是以上的種種,而是其通過驅(qū)動(dòng)瀏覽器獲得的解析的能力。所以說這貨在動(dòng)態(tài)爬取方面簡直是掛逼級別的存在,相較于手動(dòng)分析更簡單易用,節(jié)省分析打碼時(shí)間。一旦設(shè)置了隱式等待時(shí)間,它的作用范圍就是對象實(shí)例的整個(gè)生命周期。 selenium——自動(dòng)化測試工具,專門為Web應(yīng)用程序編寫的一個(gè)驗(yàn)收測試工具,測試其兼容性,功能什么的。然而讓蟲師們垂涎的并不是以上的種種,而是其通過驅(qū)動(dòng)瀏...

    fobnn 評論0 收藏0
  • 記一次還可以搶救一下的爬蟲私活,求接盤!

    摘要:前言最近接了一個(gè)爬蟲的私活,收益頗豐。項(xiàng)目需求一個(gè)類似百度文庫的網(wǎng)站,要求給出獲得文章,以形式保存下來。但是這次需要保存到這不難,難在要求格式不變。文章都是以許多標(biāo)簽組合在一起的。知情人請告知,感激不盡。 前言 最近接了一個(gè)爬蟲的私活,收益頗豐。自認(rèn)為對爬蟲掌握的還算不錯(cuò),爬過很多國內(nèi)外網(wǎng)站,數(shù)據(jù)超過百萬,應(yīng)對過封IP、設(shè)驗(yàn)證碼、假數(shù)據(jù)、強(qiáng)制登錄等反爬蟲手段。于是乎,我毫不猶豫的接下了...

    alanoddsoff 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<