selenium 淘寶登入反爬蟲解決方案(親測有效)


前言

  目前在對淘寶進行數據爬取的時候都會碰到,登入時的滑塊問題,無論是手動還是腳本都不成功。這里的很重要一個原因是很多的網站都對selenium做了反爬蟲機制。接下來是筆者參考網上的網友們的方法親自測試的一個方法,希望可以幫助到大家。注意這里使用的瀏覽器是Chrome。所以使用的驅動也是chromedriver

一,淘寶反扒js

  在淘寶登入頁面加載的js中,可以看到怎么一行代碼,如下圖:

  

  上圖的這一行代碼就對selenium進行了檢測。所以我們只需要修改驅動的改行代碼就可以。

二,修改chromedriver.exe

   vim chromedriver.exe

  1. cdc_通過鍵入/cdc_並按下來搜索return
  2. 按下啟用編輯a
  3. 刪除任意數量的內容$cdc_lasutopfhvcZLmcfl並用等量字符替換已刪除的內容。如果不這樣做,chromedriver將會失敗。
  4. 完成編輯后,按esc
  5. 要保存更改並退出,請鍵入: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()

 


免責聲明!

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



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