selenium 反爬蟲之跳過淘寶滑塊驗(yàn)證功能的實(shí)現(xiàn)代碼
在處理問題的之前,給大家個(gè)第一個(gè)錦囊!
你需要將chorme更新到最新版版本84,下載對(duì)應(yīng)的chorme驅(qū)動(dòng) 鏈接:http://chromedriver.storage.googleapis.com/index.html
注意 劃重點(diǎn)??!一定要做這一步,因?yàn)槲矣玫?3的chorme他是不行滴,~~~~~~~
問題
1.一周前我的滑塊驗(yàn)證代碼還是可以O(shè)K的,完全沒問題!附代碼 low一眼
url = "https://login.taobao.com/member/login.jhtml" browser.get(url) browser.maximize_window() # 最大化 # 填寫用戶名密碼 user = '*****' password = '*******' time.sleep(8) iframe = browser.find_element_by_xpath('//div[@class="bokmXvaDlH"]//iframe') print(iframe) browser.switch_to.frame(iframe) browser.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(id) browser.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(password) time.sleep(2) # 獲取滑塊的大小 span_background = browser.find_element_by_xpath('//*[@id="nc_1__scale_text"]/span') span_background_size = span_background.size print(span_background_size) # 獲取滑塊的位置 button = browser.find_element_by_xpath('//*[@id="nc_1_n1z"]') button_location = button.location print(button_location) # 拖動(dòng)操作:drag_and_drop_by_offset # 將滑塊的位置由初始位置,右移一個(gè)滑動(dòng)條長(zhǎng)度(即為x坐標(biāo)在滑塊位置基礎(chǔ)上,加上滑動(dòng)條的長(zhǎng)度,y坐標(biāo)保持滑塊的坐標(biāo)位置) x_location = span_background_size["width"] y_location = button_location["y"] print(x_location, y_location) action = ActionChains(browser) source = browser.find_element_by_xpath('//*[@id="nc_1_n1z"]') action.click_and_hold(source).perform() action.move_by_offset(300, 0) action.release().perform() time.sleep(1) # 登錄 browser.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click() print('登錄成功\n')
完全可以會(huì)很好的進(jìn)入淘寶,游刃有余
2.淘寶爸爸一周后就給我潑涼水,增加了自己的反爬蟲機(jī)制,出現(xiàn)如下錯(cuò)誤。
剛開始我以為是我頻繁登錄,導(dǎo)致淘寶的機(jī)器人識(shí)別我為代碼進(jìn)入。一般之前都是會(huì)在30分鐘內(nèi)解封。結(jié)果一天之后還是存在這個(gè)問題。查閱資料,翻了我的葵花寶典還是沒有解決辦法。后來看到一個(gè)文章,可能是淘寶再次更新了自己對(duì)selenium的驗(yàn)證,導(dǎo)致我不在成為漏網(wǎng)之魚。唉唉唉,導(dǎo)致我3天沒有解決?,F(xiàn)在我把自己的坑和解決辦法給大家分享一哈。成功的再次成為漏網(wǎng)之魚,哈哈哈!
步驟
1.首先很多熟悉JS的人都知道淘寶會(huì)檢測(cè)window.navigator.webdriver(js檢測(cè)特征之一),但是即使設(shè)置了"undefined"還是敗下來,看看
2.這時(shí)候細(xì)心的就需要觀察一下他的全局JS,(這個(gè)是我參考別人的思路)你會(huì)發(fā)現(xiàn)淘寶爸爸在你瀏覽器內(nèi)置的JS中有這么一段恐怖的代碼
就是這個(gè)標(biāo)黃色的東西,不會(huì)容易被發(fā)現(xiàn)的東西被檢測(cè)到你是selenium進(jìn)入,是不是特別坑!那我們接下來就需要干掉他。
3.這個(gè)時(shí)候仔細(xì)想一下,我們是通過什么打開瀏覽器呢?是的,知道的都會(huì)說webdriver.exe這個(gè)驅(qū)動(dòng)。那我們就從他開始下手,當(dāng)你打開webdriver.exe它后你會(huì)發(fā)現(xiàn)其中的問題!
注意:劃重點(diǎn)?。?!怎么打開和修改webdriver.exe。很多人都是亂碼,之前我看到Windows系統(tǒng)采用nodepad++去打開就可以了,注意我的不行!你們可以試一下。(有的人是可以的,但是我的老師電腦不可以),然后我就找了一個(gè)辦法,需要大家會(huì)一點(diǎn)vim操作,很簡(jiǎn)單的!準(zhǔn)確的說就是Linux去解決,因?yàn)樗淮嬖诰幋a問題,不會(huì)像傻Windows,特別蠢??!開發(fā)人員最好還是用Linux系統(tǒng)吧!
經(jīng)過我認(rèn)真不負(fù)努力的搜索,誒找到一個(gè)靠譜的文章,哈哈!外國(guó)的‘知乎'
文章鏈接:https://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver
就是他!
就是這段翻譯后的操作。
注意 劃重點(diǎn) ??!采用Linux系統(tǒng)的vim進(jìn)去后你看到的也是亂碼?。」?,but和Windows的亂碼是不一樣的,他會(huì)讓你找到“$cdc_asdjflasutopfhvcZLmcfl_”這個(gè)字符串的,神奇吧。這就是Linux的強(qiáng)大?。?br />
不會(huì)Linux命令的童鞋可以自己搜索一下,很簡(jiǎn)單的。修改后記得要保存哦!
4.可能大家覺得到這里就可以了,NO NO NO 這樣子你還是登錄不掉的。需要最后一個(gè)錦囊妙計(jì)??!
具體就是 你需要關(guān)閉chorme開發(fā)者模式,關(guān)閉自動(dòng)測(cè)試狀態(tài),還需要將大家都熟知的把window.navigator.webdriver設(shè)為"undefined"??赡苷f的不太明白,圖片幫你理解
# chrome_options 初始化選項(xiàng) chrome_options = webdriver.ChromeOptions() # 設(shè)置瀏覽器初始 位置x,y & 寬高x,y chrome_options.add_argument(f'--window-position={217},{172}') chrome_options.add_argument(f'--window-size={1200},{1000}') # 關(guān)閉自動(dòng)測(cè)試狀態(tài)顯示 // 會(huì)導(dǎo)致瀏覽器報(bào):請(qǐng)停用開發(fā)者模式 # window.navigator.webdriver還是返回True,當(dāng)返回undefined時(shí)應(yīng)該才可行。 chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
加上這個(gè)代碼會(huì)關(guān)閉“正受到自動(dòng)測(cè)試軟件的控制“的顯示
# 通過瀏覽器的dev_tool在get頁面錢將.webdriver屬性改為"undefined" driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""", })
加上這個(gè)代碼可以關(guān)閉開發(fā)者模式
# 通過瀏覽器的dev_tool在get頁面錢將.webdriver屬性改為"undefined" driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""", })
最后我們通過提前運(yùn)行js的方法,把window.navigator.webdriver設(shè)為"undefined"!
OK ??!大功告成??!通過這么一步步下來,你會(huì)發(fā)現(xiàn) 我的天居然沒有滑塊!開森??!
總結(jié)
到此這篇關(guān)于selenium 反爬蟲之跳過淘寶滑塊驗(yàn)證(2020/8)的文章就介紹到這了,更多相關(guān)selenium 跳過淘寶滑塊驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springBoot+webMagic實(shí)現(xiàn)網(wǎng)站爬蟲的實(shí)例代碼
- springboot+webmagic實(shí)現(xiàn)java爬蟲jdbc及mysql的方法
- python爬蟲爬取淘寶商品比價(jià)(附淘寶反爬蟲機(jī)制解決小辦法)
- python中繞過反爬蟲的方法總結(jié)
- cookies應(yīng)對(duì)python反爬蟲知識(shí)點(diǎn)詳解
- 詳解Selenium-webdriver繞開反爬蟲機(jī)制的4種方法
- 網(wǎng)站反爬蟲策略
- python 常見的反爬蟲策略
- Nginx反爬蟲策略,防止UA抓取網(wǎng)站
- Python爬蟲與反爬蟲大戰(zhàn)
- Python反爬蟲偽裝瀏覽器進(jìn)行爬蟲
- springboot反爬蟲組件kk-anti-reptile的使用方法
相關(guān)文章
js使用eval解析json實(shí)例與注意事項(xiàng)分享
eval函數(shù)在js中有不少用處了,下面我來給各位朋友介紹eval解析json的實(shí)例,基于這個(gè)實(shí)例我們引出來在eval處理json數(shù)據(jù)時(shí)的一些注意事項(xiàng),希望文章對(duì)各位同學(xué)會(huì)有所幫助2014-01-01JavaScript導(dǎo)航腳本判斷當(dāng)前導(dǎo)航
這篇文章主要介紹了JavaScript導(dǎo)航腳本判斷當(dāng)前導(dǎo)航的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07關(guān)于JavaScript回調(diào)函數(shù)的深入理解
由于函數(shù)是一等對(duì)象,我們可以把一個(gè)函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù),然后在那個(gè)函數(shù)內(nèi)執(zhí)行,至也可以被那個(gè)函數(shù)返回,然后再執(zhí)行,這篇文章主要給大家介紹了關(guān)于JavaScript回調(diào)函數(shù)的深入理解,需要的朋友可以參考下2021-06-06js點(diǎn)擊任意區(qū)域彈出層消失實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了js點(diǎn)擊任意區(qū)域彈出層消失實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12微信小程序?qū)崿F(xiàn)購物車選擇規(guī)格顏色效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)購物車選擇規(guī)格顏色選中效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01swiper4實(shí)現(xiàn)移動(dòng)端導(dǎo)航欄tab滑動(dòng)切換
這篇文章主要為大家詳細(xì)介紹了swiper4實(shí)現(xiàn)移動(dòng)端導(dǎo)航欄tab滑動(dòng)切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10JavaScript函數(shù)定義方法實(shí)例詳解
這篇文章主要介紹了JavaScript函數(shù)定義方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了javascript函數(shù)的聲明、定義、調(diào)用等原理與常見操作技巧,需要的朋友可以參考下2019-03-03