前言
目前在對淘寶進行數據爬取的時候都會碰到,登入時的滑塊問題,無論是手動還是腳本都不成功。這里的很重要一個原因是很多的網站都對selenium做了反爬蟲機制。接下來是筆者參考網上的網友們的方法親自測試的一個方法,希望可以幫助到大家。注意這里使用的瀏覽器是Chrome。所以使用的驅動也是chromedriver
一,淘寶反扒js
在淘寶登入頁面加載的js中,可以看到怎么一行代碼,如下圖:
上圖的這一行代碼就對selenium進行了檢測。所以我們只需要修改驅動的改行代碼就可以。
二,修改chromedriver.exe
vim chromedriver.exe
cdc_
通過鍵入/cdc_
並按下來搜索return
。- 按下啟用編輯
a
。 - 刪除任意數量的內容
$cdc_lasutopfhvcZLmcfl
並用等量字符替換已刪除的內容。如果不這樣做,chromedriver
將會失敗。 - 完成編輯后,按
esc
。 - 要保存更改並退出,請鍵入
:wq!
並按return
。
完成上述步驟就可以了:下圖是筆者的修改,就將最后一個字符l 改為 a
三,測試代碼
注意下面代碼的:chrome_option 以開發者模式,否則依然需要滑塊
#!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC chrome_option = webdriver.ChromeOptions() chrome_option.add_experimental_option('excludeSwitches', ['enable-automation']) # 以開發者模式 driver = webdriver.Chrome(options=chrome_option) wait = WebDriverWait(driver, 10) def search(): driver.get('https://www.taobao.com') try: search_input = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#q')) ) search_submit = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')) ) finally: pass search_input.send_keys('美食'.decode('utf-8')) search_submit.click() login() def login(): try: login_before = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#J_QRCodeLogin > div.login-links > a.forget-pwd.J_Quick2Static')) ) login_before.click() username = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#TPL_username_1')) ) password = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#TPL_password_1')) ) username.send_keys('xxxxx') # 用戶名 password.send_keys('xxxxx') # 密碼 login_submit = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#J_SubmitStatic')) ) login_submit.click() finally: pass def main(): search() if __name__ == '__main__': main()