平台

在 macOS 和 Linux 上运行 Windows 浏览器配置文件

如何在 macOS 或 Linux 上运行时呈现完整的 Windows 浏览器身份,所有平台信号在引擎级别控制。

文档中心

想直接看维护中的产品文档?

这篇文章对应的主题已经有文档中心页面。需要规范流程、当前参数和长期参考时,优先看 docs。

简介

Windows 主导全球桌面操作系统市场。根据 StatCounter 数据,Windows 约占桌面浏览器流量的 72%,在北美、欧洲和亚洲部分地区份额更高。对于在 Linux 服务器上运行的生产部署或在 macOS 上进行的开发工作,呈现 Windows 浏览器身份通常是最自然且统计上最合适的选择。

从真实 Windows 安装捕获的 BotBrowser 配置文件包含完整的 Windows 特定信号集:平台字符串、字体环境、渲染特征、屏幕指标等。在 macOS 或 Linux 主机上加载时,每个信号都与 Windows 一致。主机操作系统对浏览器的可观察身份没有任何贡献。

隐私影响:为什么在非 Windows 主机上使用 Windows 配置文件

统计论据很直接。如果你的浏览器自动化生成的流量应该看起来像普通桌面浏览,Windows 是迄今为止最常见的桌面平台。从 Linux 服务器运行 Linux 浏览器配置文件会产生统计异常:Linux 桌面使用率全球约 4%,其中大部分来自开发工作站,而不是大多数自动化代表的一般浏览模式。

对于隐私研究人员,从非 Windows 主机呈现 Windows 身份的能力使受控实验成为可能。你可以研究网站如何为 Windows 用户调整行为,测试平台特定的内容交付,以及分析使用平台信号的追踪系统,所有这些都不需要维护 Windows 机器。

对于多账户管理,Windows 配置文件为西方市场提供了最不引人注目的基线。与合适的代理、时区和区域设置结合,Windows Chrome 配置文件代表了互联网上最常见的单一浏览器配置。

技术背景

Windows 特定浏览器信号

真实的 Windows 浏览器会话通过众多信号暴露其平台:

Navigator 和 User-Agentnavigator.platform 返回 "Win32"(即使在 64 位系统上,出于兼容性考虑)。User-Agent 字符串包含 "Windows NT 10.0" 表示 Windows 10/11。navigator.userAgentData.platform 返回 "Windows",平台版本通过 getHighEntropyValues() 可用。

Client HintsSec-CH-UA-Platform HTTP 头在每个请求中报告 "Windows"。Sec-CH-UA-Platform-Version 提供特定的 Windows 版本(如 Windows 11 为 "15.0.0",Windows 10 为 "10.0.0")。

字体环境:Windows 附带数百种字体,包括 Segoe UI(系统字体)、Calibri、Cambria、Consolas、Arial、Times New Roman、Verdana、Tahoma 等。通过 CSS 或 Canvas 的字体枚举揭示这个特定集合。

渲染特征:Windows 使用 DirectWrite 进行文本渲染,与 macOS Core Text 或 Linux FreeType 相比产生独特的抗锯齿模式。这些差异在 Canvas 文本渲染中可见,可用于识别平台。

屏幕指标:常见的 Windows 屏幕分辨率(1920x1080、1366x768、2560x1440)和 devicePixelRatio 值(通常 1.0 或 1.25)与 macOS(Retina 显示器常见 DPR 为 2.0)和 Linux(变化很大)不同。

窗口外壳:浏览器窗口装饰(标题栏高度、滚动条宽度、窗口边框)的尺寸在操作系统间不同。outerWidth - innerWidthouterHeight - innerHeight 计算揭示这些尺寸。

为什么简单伪装失败

将 User-Agent 字符串更改为报告 Windows 不会改变字体环境、渲染输出、屏幕指标、窗口外壳尺寸或 Client Hints。一个声称是 Windows 但以 FreeType 特征渲染文本并报告 Linux 字体的浏览器呈现了矛盾的信号。通过跨信号分析很容易识别这些不一致。

常见方法及其局限性

User-Agent 覆盖

Playwright 和 Puppeteer 等框架允许设置自定义 User-Agent 字符串。这改变了 HTTP 头和 navigator.userAgent,但其他所有信号保持不变。navigator.platform、字体列表、渲染输出和 Client Hints 都继续反映实际主机操作系统。

Linux 上的 Windows 虚拟机

在 Linux 服务器上的虚拟机中运行 Windows 提供真正的 Windows 信号,但资源成本高。每个 VM 需要 4-8 GB RAM、专用 CPU 核心和 Windows 许可证。在规模化时,这种方法与基于配置文件的模拟相比成本过高。

Wine 或兼容层

通过 Wine 在 Linux 上运行 Windows Chrome 产生混合信号环境。一些信号反映 Windows,其他反映底层 Linux 系统。结果是比原生运行任一平台更糟糕的不一致集。

DevTools Protocol 覆盖

Chrome DevTools Protocol 允许覆盖 User-Agent 和一些平台属性。然而,这些覆盖在浏览器初始化之后应用,不影响渲染管线、字体系统或初始导航上的早期 HTTP 头(如 Client Hints)。

BotBrowser 的方法

从 Windows 系统捕获的 BotBrowser 配置文件在单个包中包含每个 Windows 特定信号。在任何主机操作系统上加载 Windows 配置文件会在浏览器初始化期间在引擎级别应用所有这些信号。

Windows 配置文件控制什么

当你在 Linux 服务器上加载 Windows 11 Chrome 配置文件时:

  • navigator.platform 返回 "Win32"
  • navigator.userAgent 包含 "Windows NT 10.0; Win64; x64"
  • Sec-CH-UA-Platform 头报告 "Windows"
  • Sec-CH-UA-Platform-Version 报告捕获的 Windows 版本
  • 字体查询返回 Windows 字体集(Segoe UI、Calibri 等)
  • Canvas 文本渲染匹配 DirectWrite 特征
  • WebGL 渲染器字符串匹配源 GPU
  • 屏幕指标匹配常见的 Windows 配置
  • 窗口外壳尺寸匹配 Windows Chromium 行为

无需额外配置

跨平台支持不是需要启用的单独功能。每个配置文件本质上都是跨平台的。你在 Linux、macOS 或 Windows 上以相同方式加载 Windows 配置文件。--bot-profile 标志就是所需的全部。

与 Edge 或 Brave 配对

Windows 用户通常使用 Microsoft Edge 或 Google Chrome。BotBrowser 支持品牌切换以呈现为 Edge:

chrome --bot-profile="/profiles/win11-edge.enc" \
       --bot-config-browser-brand=edge

这更新所有品牌特定信号(User-Agent 品牌、Client Hints 品牌令牌、功能标志)以匹配 Windows 上的 Edge。

配置和使用

Linux 上的基本 Windows 配置文件

# 在 Linux 服务器上
DISPLAY=:10.0 chrome \
  --bot-profile="/profiles/win11-chrome-130.enc" \
  --user-data-dir="$(mktemp -d)"

带美国身份的 Windows 配置文件

DISPLAY=:10.0 chrome \
  --bot-profile="/profiles/win11-chrome-130.enc" \
  --proxy-server=socks5://user:pass@us-proxy:1080 \
  --bot-config-timezone=America/New_York \
  --bot-config-locale=en-US \
  --bot-config-languages=en-US,en

Puppeteer 示例

const puppeteer = require('puppeteer-core');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/profiles/win11-chrome-130.enc',
      '--bot-config-timezone=America/Chicago',
      '--bot-config-locale=en-US',
      '--bot-config-languages=en-US,en',
    ],
    headless: true,
    defaultViewport: null,
  });

  const page = await browser.newPage();
  await page.goto('https://example.com');

  const platform = await page.evaluate(() => ({
    platform: navigator.platform,
    ua: navigator.userAgent,
  }));
  console.log(platform);
  await browser.close();
})();

Linux 上的 Edge 配 EU 代理

DISPLAY=:10.0 chrome \
  --bot-profile="/profiles/win11-edge.enc" \
  --bot-config-browser-brand=edge \
  --proxy-server=socks5://user:pass@de-proxy:1080 \
  --bot-config-timezone=Europe/Berlin \
  --bot-config-locale=de-DE \
  --bot-config-languages=de-DE,de,en

验证

通过检查多个信号类别验证 Windows 配置文件正确应用:

const page = await context.newPage();
await page.goto('https://example.com');

const verification = await page.evaluate(async () => {
  const result = {
    platform: navigator.platform,
    userAgent: navigator.userAgent,
  };

  if (navigator.userAgentData) {
    result.uaPlatform = navigator.userAgentData.platform;
    const highEntropy = await navigator.userAgentData.getHighEntropyValues([
      'platform', 'platformVersion'
    ]);
    result.platformVersion = highEntropy.platformVersion;
  }

  return result;
});

console.log('Windows profile verification:', verification);
// platform: "Win32"
// userAgent: "...Windows NT 10.0; Win64; x64..."
// uaPlatform: "Windows"
Windows 配置文件信号覆盖 navigator.platform = "Win32" UA: Windows NT 10.0 字体: Segoe UI, Calibri... Canvas: DirectWrite CH: Sec-CH-UA-Platform 屏幕: 1920x1080 @ 1.0 WebGL: 源 GPU 字符串

最佳实践

  • 选择 Windows 10 或 11 配置文件。 这些是当前主导的 Windows 版本。Windows 7 配置文件对于现代 Chrome 版本来说已过时。
  • 将代理位置与配置文件匹配。 Windows 在北美、欧洲和亚洲许多地区主导桌面流量。在这些地区使用 Windows 配置文件配合代理。
  • 在 Linux 服务器上设置 DISPLAY。 即使在 headless 模式下,在 Linux 上运行时始终设置 DISPLAY=:10.0
  • 使用 defaultViewport: null,在 Playwright 和 Puppeteer 中让配置文件控制视口尺寸。
  • 与区域设置和时区结合。 没有匹配区域设置的 Windows 配置文件是不完整的。设置 --bot-config-timezone--bot-config-locale--bot-config-languages 以匹配代理位置。
  • 考虑 Edge 以增加多样性。 Windows + Edge 是常见组合。使用 --bot-config-browser-brand=edge 与 Windows 配置文件可以多样化浏览器身份池。

常见问题

运行 Windows 配置文件时,Linux 主机会泄漏吗?

不会。BotBrowser 在引擎级别控制所有平台相关信号。加载 Windows 配置文件时,没有 Linux 特定信息暴露给网站或 JavaScript。

我可以专门运行 Windows 11 配置文件吗?

可以。Windows 11 配置文件在 Client Hints 中报告适当的平台版本。Windows 10 和 11 之间的区别主要在 Sec-CH-UA-Platform-Version 值中,该值从源系统捕获。

我需要在 Linux 服务器上安装 Windows 字体吗?

不需要。BotBrowser 配置文件包含来自源系统的字体环境。字体可用性查询返回 Windows 字体集,无论主机上安装了什么字体。

屏幕分辨率如何与 Windows 配置文件协同工作?

配置文件携带来自源系统的屏幕指标。1920x1080 和 1366x768 等常见 Windows 分辨率在配置文件中表示。主机屏幕分辨率不暴露。

我可以在不同主机操作系统上使用相同的配置文件吗?

可以。相同的 .enc 配置文件在 Linux、macOS 和 Windows 主机上工作完全相同。配置文件决定浏览器身份,而不是主机操作系统。

Windows 特定 API 如 WMI 或 DirectX 呢?

Web 浏览器通过标准 Web API 暴露有限的平台 API 集。BotBrowser 控制所有 Web 可访问的平台信号。WMI 等系统级 API 无法从 Web 内容访问。

在 Linux 上运行 Windows 配置文件有性能差异吗?

没有。配置文件控制浏览器报告什么信号。实际计算仍然在主机硬件上以原生速度运行。

总结

在 macOS 和 Linux 主机上运行 Windows 浏览器配置文件是 BotBrowser 的核心能力,使生产部署能够在经济高效的 Linux 基础设施上运行,同时呈现最常见的桌面平台身份。所有 Windows 特定信号都在引擎级别控制,除了配置文件标志外无需任何配置。

相关主题请参阅跨平台浏览器配置文件了解更广泛的跨平台概述、Android 模拟了解移动配置文件、以及浏览器品牌切换了解结合平台和品牌身份。

#Windows#Macos#Linux#跨平台#Profiles

让 BotBrowser 从研究走向生产

先用这些指南理解模型,再进入跨平台验证、隔离上下文和面向规模化的浏览器部署。