小红书自动化操作:使用本地Chrome和User Data实现高效反检测

发布于:2025-07-08 ⋅ 阅读:(22) ⋅ 点赞:(0)

小红书自动化操作:使用本地Chrome和User Data实现高效反检测

在自动化操作社交媒体平台时,如何绕过反爬虫机制一直是个挑战。本文将介绍如何配置Selenium驱动本地Chrome浏览器,并利用User Data目录保留浏览器指纹,实现更接近真实用户的操作行为。

为什么使用本地Chrome和User Data?

传统的无头浏览器或默认配置的Selenium容易被网站识别为机器人,主要原因在于:

  • 浏览器指纹特征明显(User-Agent、WebDriver标识等)
  • 缺少真实用户的浏览习惯和状态记录
  • 操作行为过于规律,缺乏随机性

而使用本地Chrome浏览器配合User Data目录可以:

  • 保留登录状态和浏览历史
  • 维持稳定的浏览器指纹
  • 通过真实浏览器二进制文件降低检测概率
实现方案:配置与代码解析

下面是完整的实现代码,它会启动本地Chrome浏览器并加载User Data目录:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import random
import os
import json


def open_xiaohongshu_with_user_data():
    try:
        # 1. 基础配置 - 浏览器选项
        chrome_options = Options()

        # 指定用户数据目录(保留浏览器指纹和登录状态)
        user_data_dir = os.path.join(os.getcwd(), "user-data")
        if not os.path.exists(user_data_dir):
            os.makedirs(user_data_dir)
        chrome_options.add_argument(f"--user-data-dir={user_data_dir}")

        # 2. 反检测核心配置 - 隐藏WebDriver特征
        chrome_options.add_argument("--disable-blink-features=AutomationControlled")  # 隐藏自动化标识
        chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])  # 排除自动化开关

        # 3. 模拟真实浏览器环境
        # 设置高版本User-Agent
        user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
        chrome_options.add_argument(f"user-agent={user_agent}")

        # 指定本地Chrome浏览器二进制文件路径(当前目录下的mychrome.exe)
        chrome_binary_path = os.path.join(os.getcwd(), "mychrome.exe")
        if os.path.exists(chrome_binary_path):
            chrome_options.binary_location = chrome_binary_path
        else:
            print(f"警告: 未找到{chrome_binary_path},将使用系统默认Chrome")

        # 4. 浏览器环境优化
        chrome_options.add_argument("--disable-gpu")  # 禁用GPU加速
        chrome_options.add_argument("--disable-features=IsolateOrigins,site-per-process")  # 禁用站点隔离
        chrome_options.add_argument(f"--window-size={random.randint(1366, 1920)},{random.randint(768, 1080)}")  # 随机窗口尺寸
        chrome_options.add_argument("--start-maximized")  # 最大化窗口(可选)

        # 5. 驱动配置(当前目录下的chromedriver)
        chrome_driver_path = os.path.join(os.getcwd(), "chromedriver116.exe")
        if not os.path.exists(chrome_driver_path):
            raise FileNotFoundError(f"未找到驱动文件: {chrome_driver_path}")
        service = Service(chrome_driver_path)

        # 6. 创建浏览器驱动
        driver = webdriver.Chrome(service=service, options=chrome_options)

        # 7. 注入JavaScript隐藏WebDriver特征
        driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
            "source": """
                // 隐藏webdriver属性
                Object.defineProperty(navigator, 'webdriver', {
                    get: () => undefined
                });
                
                // 模拟Chrome浏览器属性
                window.navigator.chrome = {
                    runtime: {},
                    browser: {
                        getVersion: () => '116.0.5845.141'
                    }
                };
                
                // 模拟媒体设备
                navigator.mediaDevices = {
                    getDevices: () => Promise.resolve([])
                };
                
                // 模拟WebGL指纹(可选,增强反检测)
                const getParameter = WebGLRenderingContext.getParameter;
                WebGLRenderingContext.prototype.getParameter = function(parameter) {
                    if (parameter === 37445) { // UNMASKED_VENDOR_WEBGL
                        return 'Intel Open Source Technology Center';
                    }
                    if (parameter === 37446) { // UNMASKED_RENDERER_WEBGL
                        return 'Mesa DRI Intel(R) HD Graphics 630 (Kaby Lake GT2)';
                    }
                    return getParameter.call(this, parameter);
                };
            """
        })

        # 8. 打开指纹检测页面验证配置
        driver.get("https://fingerprintjs.github.io/BotD/main/")
        print("已打开指纹检测页面,请查看检测结果")

        # 9. 模拟人机行为 - 滚动和延时
        wait = WebDriverWait(driver, 10)
        for _ in range(3):
            scroll_height = driver.execute_script("return document.body.scrollHeight")
            driver.execute_script(f"window.scrollTo(0, {random.randint(0, scroll_height)})")
            time.sleep(random.uniform(1, 3))  # 随机延时,模拟人类操作

        # 10. 打印页面检测结果
        try:
            result_element = wait.until(EC.presence_of_element_located((By.ID, 'result')))
            print("页面检测结果:", result_element.text)
        except Exception as e:
            print("未获取到检测结果元素:", e)

        # 保持窗口打开,手动查看检测结果
        input("按Enter键关闭浏览器...")

    except Exception as e:
        print(f"出现错误: {e}")
    finally:
        if 'driver' in locals():
            driver.quit()
            print("浏览器已关闭")


if __name__ == "__main__":
    open_xiaohongshu_with_user_data()
核心配置解析

上述代码实现了几个关键功能模块:

  1. 本地文件定位
# 使用当前目录下的文件
chrome_binary_path = os.path.join(os.getcwd(), "mychrome.exe")
chrome_driver_path = os.path.join(os.getcwd(), "chromedriver116.exe")
user_data_dir = os.path.join(os.getcwd(), "user-data")

通过os.getcwd()获取当前工作目录,确保程序会优先查找并使用当前目录下的Chrome二进制文件、驱动和User Data目录。

  1. 反检测配置
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])

这两行配置是反检测的核心,它们会隐藏Selenium的自动化标识,让网站难以察觉这是一个机器人浏览器。

  1. 浏览器指纹模拟
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
        Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
        })
        // 其他模拟代码...
    """
})

通过注入JavaScript代码,我们模拟了真实浏览器的navigator对象,隐藏了WebDriver特征并伪造了浏览器属性。

  1. 人机行为模拟
for _ in range(3):
    scroll_height = driver.execute_script("return document.body.scrollHeight")
    driver.execute_script(f"window.scrollTo(0, {random.randint(0, scroll_height)})")
    time.sleep(random.uniform(1, 3))

随机滚动和延时操作是模拟人类浏览行为的关键,避免了机器人式的机械操作。

部署与使用指南
  1. 准备文件

    • 将Chrome浏览器安装包重命名为mychrome.exe并放在当前目录
    • 下载与Chrome版本匹配的chromedriver116.exe驱动程序
    • 确保目录结构如下:
      project/
      ├── mychrome.exe
      ├── chromedriver116.exe
      └── user-data/
      
  2. 首次运行

    • 首次运行时,程序会创建user-data目录并启动Chrome
    • 浏览器会打开指纹检测页面,手动完成登录操作
    • 登录后按Enter键关闭浏览器,登录状态会保存在user-data
  3. 后续运行

    • 再次运行程序时,会加载user-data中的登录状态
    • 可以直接访问小红书等平台,无需重复登录
    • 程序会保持与首次运行一致的浏览器指纹
进阶优化建议
  1. 多用户配置

    • 创建多个user-data目录,每个目录对应一个账号
    • 通过修改user_data_dir参数切换不同账号
  2. 动态User-Agent

    • 维护一个User-Agent池,每次运行时随机选择
    • 可以模拟不同设备和浏览器版本的访问行为
  3. 代理配置

    • 添加代理支持,避免单一IP频繁访问导致封锁
    chrome_options.add_argument(f"--proxy-server={proxy_ip}:{proxy_port}")
    
  4. 行为模式优化

    • 增加更多随机操作,如鼠标移动轨迹、点击位置随机性
    • 模拟真实用户的浏览深度和停留时间

通过这种方式配置的Selenium浏览器,能够极大降低被小红书等平台检测为机器人的概率,同时保留登录状态和浏览习惯,为自动化操作提供了更稳定的环境。在实际使用中,建议结合具体业务场景进一步优化行为模拟策略,以获得更好的效果。


网站公告

今日签到

点亮在社区的每一天
去签到