selenium成功绕过淘宝登录反爬机制
前⾔
selenium + webdriver 在登录淘宝时会出现反爬滑块,该滑块⽆论怎么滑也滑不成功,只会出现哎呀,出错了,点击刷新再来⼀次
有两个问题存在,导致 selenium + webdriver 在登录时被检测出来
⼀:淘宝页⾯加载的JS中有检测selenium的,如下图:
⼆:window.navigator.webdriver的值为true
当我们正常打开chrome浏览器时window.navigator.webdriver的值是为undefined,
⽽通过chromedriver调起的chrome浏览器时window.navigator.webdriver的值是为true
针对以上两个问题我们做出相对应措施即可绕过
⼀:修改
使⽤Notepad++ 编辑器,右击打开 ,出现⼀堆乱码时不要慌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:/", options=option)
实例
就这,就这样成功绕过登录反爬啦!
ps:这⾥的⽤户和密码是随便输的哈,输⼊正确的⽤户名和密码是可以登录的!
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdrivermon.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
option = webdriver.ChromeOptions()selenium怎么使用
option.add_experimental_option('excludeSwitches', ['enable-automation'])  # 这⾥去掉window.navigator.webdriver的特性option.add_argument("--disable-blink-features=AutomationControlled")  # 屏蔽webdriver特征
browser = webdriver.Chrome(executable_path="E:/", options=option)
<('www.taobao')
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()