selenium 反爬蟲(chóng)之跳過(guò)淘寶滑塊驗(yàn)證功能的實(shí)現(xiàn)代碼
在處理問(wè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他是不行滴,~~~~~~~
問(wèn)題
1.一周前我的滑塊驗(yàn)證代碼還是可以O(shè)K的,完全沒(méi)問(wèn)題!附代碼 low一眼
url = "https://login.taobao.com/member/login.jhtml"
browser.get(url)
browser.maximize_window() # 最大化
# 填寫(xiě)用戶名密碼
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.淘寶爸爸一周后就給我潑涼水,增加了自己的反爬蟲(chóng)機(jī)制,出現(xiàn)如下錯(cuò)誤。

剛開(kāi)始我以為是我頻繁登錄,導(dǎo)致淘寶的機(jī)器人識(shí)別我為代碼進(jìn)入。一般之前都是會(huì)在30分鐘內(nèi)解封。結(jié)果一天之后還是存在這個(gè)問(wèn)題。查閱資料,翻了我的葵花寶典還是沒(méi)有解決辦法。后來(lái)看到一個(gè)文章,可能是淘寶再次更新了自己對(duì)selenium的驗(yàn)證,導(dǎo)致我不在成為漏網(wǎng)之魚(yú)。唉唉唉,導(dǎo)致我3天沒(méi)有解決?,F(xiàn)在我把自己的坑和解決辦法給大家分享一哈。成功的再次成為漏網(wǎng)之魚(yú),哈哈哈!
步驟
1.首先很多熟悉JS的人都知道淘寶會(huì)檢測(cè)window.navigator.webdriver(js檢測(cè)特征之一),但是即使設(shè)置了"undefined"還是敗下來(lái),看看

2.這時(shí)候細(xì)心的就需要觀察一下他的全局JS,(這個(gè)是我參考別人的思路)你會(huì)發(fā)現(xiàn)淘寶爸爸在你瀏覽器內(nèi)置的JS中有這么一段恐怖的代碼

就是這個(gè)標(biāo)黃色的東西,不會(huì)容易被發(fā)現(xiàn)的東西被檢測(cè)到你是selenium進(jìn)入,是不是特別坑!那我們接下來(lái)就需要干掉他。
3.這個(gè)時(shí)候仔細(xì)想一下,我們是通過(guò)什么打開(kāi)瀏覽器呢?是的,知道的都會(huì)說(shuō)webdriver.exe這個(gè)驅(qū)動(dòng)。那我們就從他開(kāi)始下手,當(dāng)你打開(kāi)webdriver.exe它后你會(huì)發(fā)現(xiàn)其中的問(wèn)題!
注意:劃重點(diǎn)?。。≡趺创蜷_(kāi)和修改webdriver.exe。很多人都是亂碼,之前我看到Windows系統(tǒng)采用nodepad++去打開(kāi)就可以了,注意我的不行!你們可以試一下。(有的人是可以的,但是我的老師電腦不可以),然后我就找了一個(gè)辦法,需要大家會(huì)一點(diǎn)vim操作,很簡(jiǎn)單的!準(zhǔn)確的說(shuō)就是Linux去解決,因?yàn)樗淮嬖诰幋a問(wèn)題,不會(huì)像傻Windows,特別蠢??!開(kāi)發(fā)人員最好還是用Linux系統(tǒng)吧!
經(jīng)過(guò)我認(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)大??!
不會(huì)Linux命令的童鞋可以自己搜索一下,很簡(jiǎn)單的。修改后記得要保存哦!
4.可能大家覺(jué)得到這里就可以了,NO NO NO 這樣子你還是登錄不掉的。需要最后一個(gè)錦囊妙計(jì)??!
具體就是 你需要關(guān)閉chorme開(kāi)發(fā)者模式,關(guān)閉自動(dòng)測(cè)試狀態(tài),還需要將大家都熟知的把window.navigator.webdriver設(shè)為"undefined"??赡苷f(shuō)的不太明白,圖片幫你理解

# 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)停用開(kāi)發(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è)試軟件的控制“的顯示

# 通過(guò)瀏覽器的dev_tool在get頁(yè)面錢將.webdriver屬性改為"undefined"
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",
})
加上這個(gè)代碼可以關(guān)閉開(kāi)發(fā)者模式

# 通過(guò)瀏覽器的dev_tool在get頁(yè)面錢將.webdriver屬性改為"undefined"
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",
})
最后我們通過(guò)提前運(yùn)行js的方法,把window.navigator.webdriver設(shè)為"undefined"!
OK ??!大功告成!!通過(guò)這么一步步下來(lái),你會(huì)發(fā)現(xiàn) 我的天居然沒(méi)有滑塊!開(kāi)森!!
總結(jié)
到此這篇關(guān)于selenium 反爬蟲(chóng)之跳過(guò)淘寶滑塊驗(yàn)證(2020/8)的文章就介紹到這了,更多相關(guān)selenium 跳過(guò)淘寶滑塊驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springBoot+webMagic實(shí)現(xiàn)網(wǎng)站爬蟲(chóng)的實(shí)例代碼
- springboot+webmagic實(shí)現(xiàn)java爬蟲(chóng)jdbc及mysql的方法
- python爬蟲(chóng)爬取淘寶商品比價(jià)(附淘寶反爬蟲(chóng)機(jī)制解決小辦法)
- python中繞過(guò)反爬蟲(chóng)的方法總結(jié)
- cookies應(yīng)對(duì)python反爬蟲(chóng)知識(shí)點(diǎn)詳解
- 詳解Selenium-webdriver繞開(kāi)反爬蟲(chóng)機(jī)制的4種方法
- 網(wǎng)站反爬蟲(chóng)策略
- python 常見(jiàn)的反爬蟲(chóng)策略
- Nginx反爬蟲(chóng)策略,防止UA抓取網(wǎng)站
- Python爬蟲(chóng)與反爬蟲(chóng)大戰(zhàn)
- Python反爬蟲(chóng)偽裝瀏覽器進(jìn)行爬蟲(chóng)
- springboot反爬蟲(chóng)組件kk-anti-reptile的使用方法
相關(guān)文章
js使用eval解析json實(shí)例與注意事項(xiàng)分享
eval函數(shù)在js中有不少用處了,下面我來(lái)給各位朋友介紹eval解析json的實(shí)例,基于這個(gè)實(shí)例我們引出來(lái)在eval處理json數(shù)據(jù)時(shí)的一些注意事項(xiàng),希望文章對(duì)各位同學(xué)會(huì)有所幫助2014-01-01
JavaScript導(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-06
js點(diǎn)擊任意區(qū)域彈出層消失實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了js點(diǎn)擊任意區(qū)域彈出層消失實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
微信小程序?qū)崿F(xiàn)購(gòu)物車選擇規(guī)格顏色效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)購(gòu)物車選擇規(guī)格顏色選中效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
swiper4實(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-10
JavaScript函數(shù)定義方法實(shí)例詳解
這篇文章主要介紹了JavaScript函數(shù)定義方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了javascript函數(shù)的聲明、定義、調(diào)用等原理與常見(jiàn)操作技巧,需要的朋友可以參考下2019-03-03

