直接上代码,亲测可用
'''
Chrome自带的开发者工具DevTools功能非常强大。有时候我们在使用Selenium操作浏览器时需要通过调用一下DevTools的方法来完成一些设置,如模拟移动设备,弱网模拟等等。
Selenium的WebDriver类中有一个execute_cdp_cmd(self, cmd, cmd_args)方法可以用来执行Chrome开发这个工具命令。
cdp即Chrome DevTools Protocal, Chrome开发者工具协议,API文档可参考:https://chromedevtools.github.io/devtools-protocol/tot/Emulation
使用方法,示例如下:
'''
def get_browser():
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
return driver
if __name__ == '__main__':
url = 'https://login.taobao.com/member/login.jhtml'
from selenium.webdriver import ActionChains
from selenium import webdriver
import random,time
browser = get_browser()
browser.get(url)
time.sleep(random.randint(5,10)) #随机休眠5-10s
browser.find_element_by_xpath('//[@id=“fm-login-id”]').click()
browser.find_element_by_name('fm-login-id').click()
browser.find_element_by_name('fm-login-id').send_keys('你的淘宝账号')
time.sleep(random.randint(1, 5))#随机休眠1-5s
browser.find_element_by_xpath('//[@id=“fm-login-password”]').send_keys('你的淘宝密码')
time.sleep(random.randint(5, 10))#随机休眠5-10s
browser.find_element_by_xpath('//*[@id=“login-form”]/div[4]/button').click()
try:
# 出现验证码,滑动验证
slider = browser.find_element_by_xpath("//span[contains(@class, 'btn_slide')]")
if slider.is_displayed():
# 拖拽滑块
ActionChains.drag_and_drop_by_offset(slider, 258, 0).perform()
time.sleep(0.5)
# 释放滑块,相当于点击拖拽之后的释放鼠标
ActionChains.release().perform()
except Exception as e:
print('未出现登录验证码')
browser.quit()