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()

 

posted @ 2019-04-24 11:28  他山之石·玉  阅读(5917)  评论(2编辑  收藏  举报