selenium 成功繞過淘寶登錄反爬機制


前言
selenium + webdriver 在登錄淘寶時會出現反爬滑塊,該滑塊無論怎么滑也滑不成功,只會出現 哎呀,出錯了,點擊刷新再來一次

 

有兩個問題存在,導致 selenium + webdriver 在登錄時被檢測出來
一:淘寶頁面加載的JS中有檢測selenium的,如下圖:

 

 

 


二:window.navigator.webdriver的值為true
當我們正常打開chrome瀏覽器時window.navigator.webdriver的值是為undefined,

而通過chromedriver調起的chrome瀏覽器時window.navigator.webdriver的值是為true

 

 

 


針對以上兩個問題 我們做出相對應措施即可繞過
一:修改chromedriver.exe
使用Notepad++ 編輯器,右擊打開 chromedriver.exe ,出現一堆亂碼時不要慌ctrl + f,輸入$cdc,查找會看到有這么一串key值 $cdc_asdjflasutopfhvcZLmcfl_

通過key值我們可以發現該值與淘寶JS檢測selenium的值一致!

之后我們把上面key值標志為紅色部分的字符串進行修改替換即可。

注意 :查找的字符只有$cdc四個字符,沒有空格 沒有空格 沒有空格
注意 :修改后的字符長度要和原來的一致!

 

 

 


二:設置Chrome為開發者模式

option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation']) # 這里去掉window.navigator.webdriver的特性
option.add_argument("--disable-blink-features=AutomationControlled")
browser = webdriver.Chrome(executable_path="E:/Python/chromedriver.exe", options=option)


實例
就這,就這樣成功繞過登錄反爬啦!
ps:這里的用戶和密碼是隨便輸的哈,輸入正確的用戶名和密碼是可以登錄的!

 

from time import sleep

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation']) # 這里去掉window.navigator.webdriver的特性
option.add_argument("--disable-blink-features=AutomationControlled") # 屏蔽webdriver特征
browser = webdriver.Chrome(executable_path="E:/Python/chromedriver.exe", options=option)
browser.get('http://www.taobao.com')
browser.maximize_window()
button = WebDriverWait(browser, timeout=30).until(EC.presence_of_element_located((By.CLASS_NAME, 'h')))
button.click()
username_sender = WebDriverWait(browser, timeout=30).until(EC.presence_of_element_located((By.ID, 'fm-login-id')))
username_sender.send_keys("xxxxxx")
password_sender=WebDriverWait(browser, timeout=30).until(EC.presence_of_element_located((By.ID, 'fm-login-password')))
password_sender.send_keys("xxxxxx")
sleep(3)
try:
browser.switch_to.frame(0)
# 找到滑塊
slider = browser.find_element_by_xpath("//span[contains(@class, 'btn_slide')]")
# 判斷滑塊是否可見
if slider.is_displayed():
# 點擊並且不松開鼠標
ActionChains(browser).click_and_hold(on_element=slider).perform()
# 往右邊移動258個位置
ActionChains(browser).move_by_offset(xoffset=258, yoffset=0).perform()
# 松開鼠標
ActionChains(browser).pause(0.5).release().perform()
browser.switch_to.default_content()
except:
pass
button = WebDriverWait(browser, timeout=30).until(EC.presence_of_element_located((By.CLASS_NAME, 'password-login')))
button.click()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM