前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现

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

原创
作者头像
jackcode
发布于 2025-04-15 03:09:38
发布于 2025-04-15 03:09:38
15300
代码可运行
举报
文章被收录于专栏:爬虫资料爬虫资料
运行总次数:0
代码可运行
爬虫代理
爬虫代理

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(navigator.webdriver); // true:表明是自动化工具

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


二、环境准备

1. 安装依赖

代码语言:bash
AI代码解释
复制
pip install undetected-chromedriver selenium requests

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

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

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 配置代理 亿牛云爬虫代理 www.16yun.cn
proxy_host = "proxy.16yun.cn"
proxy_port = "8010"
proxy_user = "16YUN"
proxy_pass = "16IP"

三、核心步骤

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

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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

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

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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()

四、完整代码汇总

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 请整合以上两个函数并在此调用
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 精准提取实现结构化采集。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景介绍:你被自动化检测拒之门外了吗?
  • 二、环境准备
    • 1. 安装依赖
    • 2. 爬虫代理信息(请替换为你的真实账户信息)
  • 三、核心步骤
    • ✅ 第一步:配置无痕浏览器并隐藏 webdriver
    • ✅ 第二步:模拟搜索关键词并采集信息
  • 四、完整代码汇总
  • 五、常见错误分析
  • 六、总结与提升
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档