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)大!!
不會(huì)Linux命令的童鞋可以自己搜索一下,很簡(jiǎn)單的。修改后記得要保存哦!
4.可能大家覺得到這里就可以了,NO NO NO 這樣子你還是登錄不掉的。需要最后一個(gè)錦囊妙計(jì)?。?br /> 具體就是 你需要關(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頁(yè)面錢將.webdriver屬性改為"undefined"
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",
})
加上這個(gè)代碼可以關(guān)閉開發(fā)者模式

# 通過瀏覽器的dev_tool在get頁(yè)面錢將.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)文章
IE9+已經(jīng)不對(duì)document.createElement向下兼容的解決方法
這篇文章主要介紹了IE9+已經(jīng)不對(duì)document.createElement向下兼容的解決方法,需要的朋友可以參考下2015-09-09
js遍歷對(duì)象數(shù)組并獲取對(duì)象相應(yīng)的屬性值實(shí)例代碼
對(duì)于數(shù)組或者對(duì)象的遍歷,篩選,提取等操作是前端開發(fā)中經(jīng)常有的需求,下面這篇文章主要給大家介紹了關(guān)于js遍歷對(duì)象數(shù)組并獲取對(duì)象相應(yīng)的屬性值的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
每天一篇javascript學(xué)習(xí)小結(jié)(Date對(duì)象)
這篇文章主要介紹了javascript中的Date對(duì)象知識(shí)點(diǎn),對(duì)Date對(duì)象的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-11-11
JavaScript加強(qiáng)之自定義event事件
event事件在本文以自定義的方式出現(xiàn),感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-09-09
用javascript實(shí)現(xiàn)的仿Flash廣告圖片輪換效果
用javascript實(shí)現(xiàn)的仿Flash廣告圖片輪換效果...2007-04-04
JS非Alert實(shí)現(xiàn)網(wǎng)頁(yè)右下角“未讀信息”效果彈窗
這篇文章主要介紹了JS非Alert實(shí)現(xiàn)網(wǎng)頁(yè)右下角“未讀信息”效果彈窗的方法,涉及JavaScript動(dòng)態(tài)操作頁(yè)面元素實(shí)現(xiàn)彈窗效果的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
js實(shí)現(xiàn)字符全排列算法的簡(jiǎn)單方法
下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)字符全排列算法的簡(jiǎn)單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
深入探究使JavaScript動(dòng)畫流暢的一些方法
這篇文章主要介紹了使JavaScript動(dòng)畫流暢的一些方法,包括與CSS動(dòng)畫效果的一些對(duì)比,需要的朋友可以參考下2015-06-06

