深挖navigator.webdriver浏览器自动化检测的底层分析

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,1000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文详细讲解了如何通过技术手段破解浏览器 `navigator.webdriver` 检测,结合爬虫代理、多线程等策略,在豆瓣图书页面批量采集数据。具体包括:隐藏 Selenium 特征、配置代理突破 IP 限制、设置伪装用户、利用多线程提升效率。文章面向初学者,提供分步教程与示例代码,同时设有「陷阱警告」帮助规避常见问题。目标是从底层实现反检测,高效采集图书评分、简介、作者等信息,适合具备 Python 和 Selenium 基础的读者实践学习。

本文将带你深入探索并实践如何从底层层面破解浏览器 navigator.webdriver 检测,结合爬虫代理等策略伪装、多线程加速等技术,在豆瓣图书搜索页面上批量采集图书评分、简介、作者等信息。文章面向初学者,采用分步教程型结构,并增设「陷阱警告」板块,帮助你规避常见误区,快速上手。

明确目标 + 前置知识

目标

  1. 破解 Selenium 驱动浏览器中 navigator.webdriver 检测。
  2. 使用爬虫代理(固定域名、端口、用户名、密码)突破 IP 限制。
  3. 设置 Cookie 与自定义 User-Agent 伪装真实用户。
  4. 利用多线程技术并发提升采集效率。
  5. https://book.douban.com 上,根据图书名搜索并采集评分、简介、作者等信息。

前置知识

  • Python 基础、Selenium 库使用。
  • HTTP 请求、Cookie 与 User-Agent 原理。
  • 代理 IP 概念及 HTTP 代理认证。
  • 线程/多线程编程(threadingconcurrent.futures)。

按步骤拆解操作

步骤 1:获取并配置爬虫代理信息

获取代理配置:

  • 代理域名proxy.16yun.cn
  • 端口12345
  • 用户名your_username
  • 密码your_password

步骤 2:构建 Selenium 驱动并底层隐藏 navigator.webdriver

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def create_driver():
    # 参考亿牛云爬虫代理示例 www.16yun.cn
    PROXY_HOST = 'proxy.16yun.cn'              # 代理域名
    PROXY_PORT = '12345'                       # 代理端口
    PROXY_USER = 'your_username'               # 代理用户名
    PROXY_PASS = 'your_password'               # 代理密码
    CUSTOM_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'  # 自定义 UA

    options = Options()
    # 隐藏 Selenium 特征
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument('--disable-blink-features=AutomationControlled')
    # 设置 User-Agent
    options.add_argument(f'--user-agent={CUSTOM_UA}')
    # 配置代理
    proxy = f"{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
    options.add_argument(f'--proxy-server=http://{proxy}')
    # 可选:无头模式
    options.add_argument('--headless')

    driver = webdriver.Chrome(options=options)
    # 在每次新页面加载前注入 JS,隐藏 navigator.webdriver 属性
    driver.execute_cdp_cmd(
        'Page.addScriptToEvaluateOnNewDocument',
        {
   'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined});"}
    )
    return driver
  • 利用 excludeSwitchesdisable-blink-features 避免基本指纹检测
  • 使用 CDP 命令 Page.addScriptToEvaluateOnNewDocumentnavigator.webdriver 强制设为 undefined

步骤 3:设置 Cookie 和发起搜索请求

from selenium.webdriver.common.by import By
import time

def fetch_book_info(driver, book_name):
    # 访问豆瓣图书搜索页面
    url = f"https://book.douban.com/subject_search?search_text={book_name}"
    driver.get('https://book.douban.com')
    # 添加示例 Cookie(如有登录需求,可替换为实际 Cookie)
    driver.add_cookie({
   'name': 'example_cookie', 'value': 'value123', 'domain': 'book.douban.com'})
    driver.get(url)
    time.sleep(2)  # 等待页面加载
    # 定位结果并点击第一个条目
    first = driver.find_element(By.CSS_SELECTOR, '.subject-item .nbg')
    first.click()
    time.sleep(2)
    # 提取评分、简介、作者
    rating = driver.find_element(By.CSS_SELECTOR, 'strong.rating_num').text
    summary = driver.find_element(By.CSS_SELECTOR, '#link-report .intro').text
    author = driver.find_element(By.CSS_SELECTOR, '#info').text.split('\n')[0]
    return {
   'name': book_name, 'rating': rating, 'summary': summary, 'author': author}
  • driver.add_cookie 实现 Cookie 注入,模拟登录状态或个性化请求
  • 通过 CSS 选择器提取目标信息

步骤 4:启用多线程并发采集

from concurrent.futures import ThreadPoolExecutor

def main(book_list):
    results = []
    with ThreadPoolExecutor(max_workers=5) as executor:
        # 每个线程创建独立 driver
        futures = [executor.submit(lambda name: fetch_book_info(create_driver(), name), name)
                   for name in book_list]
        for future in futures:
            results.append(future.result())
    for info in results:
        print(info)

if __name__ == '__main__':
    books = ['三体', '活着', '百年孤独', '小王子']
    main(books)
  • 利用 ThreadPoolExecutor 并发执行,最大 5 个线程同时跑
  • 每个线程内部独立创建并关闭 WebDriver,避免资源冲突

陷阱警告

  • 未注入 JS 时机不对execute_script 在页面加载后才执行,JS 注入可能失效,必须用 Page.addScriptToEvaluateOnNewDocument
  • 代理格式错误--proxy-server 参数需包含认证信息,否则返回 407 错误
  • 线程数过多导致资源占用:ChromeDriver 启动耗内存,建议根据机器性能调整 max_workers

常见错误提示 + 延伸练习

常见错误提示

  • selenium.common.exceptions.WebDriverException: unknown error: net::ERR_PROXY_CONNECTION_FAILED
    检查代理域名、端口及用户名密码是否正确。
  • NoSuchElementException
    页面结构可能变动,需更新 CSS/XPath 选择器。
  • 页面加载不完全
    可增大 time.sleep 或改用 WebDriverWait 精准等待。

延伸练习

  1. 切换更多反检测手段:尝试用 undetected-chromedriver 库优化指纹隐藏。
  2. Session 复用:在多次请求中复用同一浏览器实例,减少启动开销。
  3. IP 自动切换:结合「自主切换」模式,通过 Proxy-Tunnel 请求头动态控制代理 。

通过本文的分步指导与示例代码,你已经掌握了从底层破解 navigator.webdriver 检测,并结合爬虫代理与多线程技术,在豆瓣图书页面上高效采集所需信息的完整流程。

相关文章
|
2月前
|
Web App开发 人工智能 自然语言处理
Playwright MCP浏览器自动化指南
本文教你如何通过Playwright MCP让AI直接操作浏览器,自动运行和调试代码,无需手动切换界面。只需简单配置,即可用自然语言指挥AI完成页面操作、问题排查与自主修复,真正实现自动化高效开发。
|
2月前
|
人工智能 自然语言处理 监控
Browser Use:打造你的浏览器自动化助手
你是否曾希望用简单的一句话就能让浏览器自动填表、抓数据或做测试?Browser Use 让这成为现实。它结合了语言模型的智能和传统自动化的稳定,能听懂自然语言指令,自己规划步骤,还能应对网页变动和错误。无论是开发者还是普通用户,都能用它高效完成日常操作,省时省力。安装简单,写行指令就能马上体验。
|
1月前
|
数据采集 人工智能 自然语言处理
Playwright MCP 浏览器自动化框架全面解析
Playwright MCP是微软推出的开源项目,结合Playwright与MCP协议,让AI通过结构化数据直接操作浏览器。告别传统视觉识别,实现高效、精准的网页自动化,广泛应用于测试、爬虫、办公自动化等场景,大幅提升效率与可靠性。
|
2月前
|
人工智能 自然语言处理 监控
Playwright MCP浏览器自动化全攻略
Playwright MCP让AI通过自然语言操控浏览器,无需编程即可实现网页自动化。支持智能元素识别、多浏览器操作与动态交互,广泛应用于搜索、数据抓取、自动发布等场景,大幅提升效率,降低技术门槛,是浏览器自动化的新范式。
|
1月前
|
Web App开发 人工智能 JavaScript
入门指南:使用 Playwright MCP Server 为你的 AI Agent 赋予浏览器自动化能力
借助Playwright MCP Server,AI助手可实现网页自动操作:填表、抓数据、执行重复任务。通过MCP协议连接AI与浏览器,让AI从“能说”变为“会做”。支持主流浏览器,配置简单,助力打造智能数字助手。
|
2月前
|
人工智能 自然语言处理 监控
Browser Use 浏览器自动化 Agent:让浏览器自动为你工作
Browser Use是一款创新浏览器自动化框架,结合LLM智能与自动化技术,能理解自然语言指令,自主操作浏览器完成任务,如数据抓取、表单填写、自动化测试等。具备智能决策、自适应处理、自然语言交互和自我修正能力,简化复杂任务,提升效率。
|
4月前
|
Web App开发 开发框架 .NET
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
|
6月前
|
监控 安全 Linux
Arista CloudVision 2025.1 - 多云和数据中心网络自动化、监控和分析
Arista CloudVision 2025.1 - 多云和数据中心网络自动化、监控和分析
302 2
Arista CloudVision 2025.1 - 多云和数据中心网络自动化、监控和分析
|
7月前
|
数据采集 JavaScript 前端开发
浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现
本文介绍了如何构建一个反检测爬虫以爬取Amazon商品信息。通过使用`undetected-chromedriver`规避自动化检测,修改`navigator.webdriver`属性隐藏痕迹,并结合代理、Cookie和User-Agent技术,实现稳定的数据采集。代码包含浏览器配置、无痕设置、关键词搜索及数据提取等功能,同时提供常见问题解决方法,助你高效应对反爬策略。
628 1
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
292 63