zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    99%的人都理解错了HTTP中GET与POST的区别
    idea 使用
    一道java算法题
    记一次jedis并发使用问题JedisException: Could not return the resource to the pool
    我珍藏的神兵利器
    记一次诡异的debug
    spring cloud config
    spring mvc 集成quartz
    git使用下
    Mongo--03 mongo副本集、备份与恢复
  • 原文地址:https://www.cnblogs.com/tashanzhishi/p/10761394.html
Copyright © 2011-2022 走看看