浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
Elasticsearch Serverless检索通用型,资源抵扣包 100CU*H
简介: 本文介绍了如何构建一个反检测爬虫以爬取Amazon商品信息。通过使用`undetected-chromedriver`规避自动化检测,修改`navigator.webdriver`属性隐藏痕迹,并结合代理、Cookie和User-Agent技术,实现稳定的数据采集。代码包含浏览器配置、无痕设置、关键词搜索及数据提取等功能,同时提供常见问题解决方法,助你高效应对反爬策略。

爬虫代理.png


一、背景介绍:你被自动化检测拒之门外了吗?

在使用 Selenium 或 Playwright 等浏览器自动化工具爬取数据时,经常会遇到「被检测」问题,尤其像 Amazon 这样反爬策略严密的网站。常见的检测机制之一就是检查 JavaScript 中的 navigator.webdriver 属性:

console.log(navigator.webdriver); // true:表明是自动化工具

因此,本文将带你深入了解如何在浏览器中底层修改该属性,并结合代理、Cookie、User-Agent 技术,实现一个能顺利爬取 Amazon 网站商品信息的反检测爬虫。


二、环境准备

1. 安装依赖

pip install undetected-chromedriver selenium requests

我们使用 undetected-chromedriver 代替原生 Selenium 驱动,内置多种反检测机制,更适合应对大型网站的反爬。

2. 爬虫代理信息(请替换为你的真实账户信息)

# 配置代理 亿牛云爬虫代理 www.16yun.cn
proxy_host = "proxy.16yun.cn"
proxy_port = "8010"
proxy_user = "16YUN"
proxy_pass = "16IP"

三、核心步骤

✅ 第一步:配置无痕浏览器并隐藏 webdriver

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time

def create_stealth_driver(proxy_host, proxy_port, proxy_user, proxy_pass, user_agent, cookies):
    options = Options()
    options.add_argument(f"user-agent={user_agent}")
    options.add_argument("--disable-blink-features=AutomationControlled")

    # 配置爬虫代理
    options.add_argument(f'--proxy-server=http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}')

    # 启动无头浏览器(也可以关闭无头方便调试)
    # options.add_argument('--headless')

    # 创建驱动
    import undetected_chromedriver as uc
    driver = uc.Chrome(options=options)

    # 修改 webdriver 属性(核心)
    driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

    # 设置 cookie
    driver.get("https://www.amazon.com")
    for cookie in cookies:
        driver.add_cookie(cookie)

    return driver

✅ 第二步:模拟搜索关键词并采集信息

def scrape_amazon(keyword):
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    cookies = []  # 可以从浏览器复制一组,也可通过登录获取

    driver = create_stealth_driver(proxy_host, proxy_port, proxy_user, proxy_pass, user_agent, cookies)

    driver.get(f"https://www.amazon.com/s?k={keyword}")
    time.sleep(3)

    products = driver.find_elements(By.XPATH, "//div[@data-component-type='s-search-result']")

    for product in products[:10]:  # 只取前10条数据举例
        try:
            title = product.find_element(By.TAG_NAME, "h2").text
            price_whole = product.find_element(By.CLASS_NAME, "a-price-whole").text
            price_frac = product.find_element(By.CLASS_NAME, "a-price-fraction").text
            price = f"{price_whole}.{price_frac}"
            reviews = product.find_element(By.XPATH, ".//span[@class='a-size-base']").text

            print(f"名称: {title}")
            print(f"价格: ${price}")
            print(f"评论: {reviews}")
            print("=" * 30)
        except Exception as e:
            continue

    driver.quit()

四、完整代码汇总

# 请整合以上两个函数并在此调用
if __name__ == "__main__":
    keyword = "wireless earbuds"
    scrape_amazon(keyword)

五、常见错误分析

错误提示 原因 解决方案
selenium.common.exceptions.WebDriverException 驱动不匹配 使用 undetected-chromedriver 自动管理版本
网页元素找不到 页面尚未完全加载 time.sleep() 或 WebDriverWait
显示“访问过于频繁” IP 被封 更换代理 IP,使用优质高匿代理
无法设置 Cookie 页面未打开或未加载完成 先访问目标页面,再添加 Cookie

六、总结与提升

本文以 Amazon 网站为例,讲解了如何通过底层 JS 技巧对抗自动化检测,关键点在于:

  • 使用 undetected-chromedriver 替代传统 Selenium;
  • 修改 navigator.webdriver 属性隐藏自动化痕迹;
  • 配合代理、User-Agent 和 Cookie 构建可信环境;
  • 页面加载等待 + XPath 精准提取实现结构化采集。
相关文章
|
4天前
|
数据采集 前端开发 JavaScript
深挖navigator.webdriver浏览器自动化检测的底层分析
本文详细讲解了如何通过技术手段破解浏览器 `navigator.webdriver` 检测,结合爬虫代理、多线程等策略,在豆瓣图书页面批量采集数据。具体包括:隐藏 Selenium 特征、配置代理突破 IP 限制、设置伪装用户、利用多线程提升效率。文章面向初学者,提供分步教程与示例代码,同时设有「陷阱警告」帮助规避常见问题。目标是从底层实现反检测,高效采集图书评分、简介、作者等信息,适合具备 Python 和 Selenium 基础的读者实践学习。
38 12
深挖navigator.webdriver浏览器自动化检测的底层分析
|
4月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
305 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
5月前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
482 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
4月前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
6月前
|
数据采集 JavaScript 前端开发
浏览器自动化
浏览器自动化利用工具(如Selenium WebDriver、Puppeteer)模拟用户行为,实现测试、数据抓取等功能。它涵盖启动/关闭浏览器、元素定位操作、事件模拟、性能及可访问性测试等,广泛应用于Web应用的开发与维护,提升测试效率和可靠性。
|
6月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
882 9
|
6月前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
7月前
|
Web App开发 开发者
|
8月前
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
555 4
|
6月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
152 63