Назад в Центр знаний
Платформа

Запуск профилей Windows-браузера на macOS и Linux

Как использовать профиль Windows-браузера на macOS или Linux с проверкой значений в реальной сессии и учетом границ хоста.

BotBrowser Team

Документация

Нужна поддерживаемая продуктовая документация?

У этой статьи есть соответствующая страница в центре документации. Используйте docs для каноничного сценария настройки, актуальных флагов и долгосрочной справки.

Статья о запуске профиля Windows на macOS или Linux для контролируемых тестов. BotBrowser применяет документированные значения платформы из профиля, но не делает хост эквивалентом Windows: шрифты, Canvas, WebGL и метрики экрана нужно измерять.

Краткое резюме

Профиль Windows задаёт navigator.platform, navigator.userAgent, Sec-CH-UA-Platform и версию платформы. Остальные сигналы проверяйте на своём хосте, а не считайте совпавшими с настоящей установкой Windows.

Содержание руководства

Введение

Windows является распространенной настольной платформой, но оценки рынка зависят от даты, региона и метода измерения. На Linux или macOS профиль Windows полезен, когда тест приложения явно охватывает поведение Windows-браузера.

Профили BotBrowser, захваченные с реальных установок Windows, содержат документированные видимые браузеру значения платформы. На macOS или Linux это входные значения, которые нужно измерять в реальной сессии; хост, display, графика, сеть и приложение могут влиять на наблюдения.

Влияние на конфиденциальность: зачем профили Windows на не-Windows хостах

Аргумент тестирования прост: выбирайте профиль, соответствующий документированному поведению, которое должно поддерживать приложение. Не выбирайте профиль, чтобы трафик выглядел обычным или чтобы делать выводы о посетителе. Linux-хост может запускать тест с Windows-профилем, если сценарий разрешен и зафиксированы границы хоста, сети и приложения.

Для исследователей конфиденциальности возможность представлять идентичность Windows с не-Windows хоста позволяет проводить контролируемые эксперименты. Вы можете изучать, как веб-сайты адаптируют свое поведение для Windows-пользователей, тестировать платформенно-специфичную доставку контента и анализировать системы отслеживания, использующие платформенные сигналы, и все это без обслуживания Windows-машины.

Для тестов локализации или совместимости сочетайте профиль с явно выбранными прокси, часовым поясом и локалью, а затем проверяйте каждый вход отдельно. Эти параметры описывают сценарий теста и не устанавливают региональную идентичность или универсальную совместимость.

Техническая основа

Windows-специфичные сигналы браузера

Реальная сессия Windows-браузера раскрывает свою платформу через многочисленные сигналы:

Navigator и User-Agent: navigator.platform возвращает "Win32" (даже на 64-битных системах, для обратной совместимости). Строка User-Agent содержит "Windows NT 10.0" для Windows 10/11. navigator.userAgentData.platform возвращает "Windows" с версией платформы, доступной через getHighEntropyValues().

Client Hints: Заголовок HTTP Sec-CH-UA-Platform сообщает "Windows" в каждом запросе. Sec-CH-UA-Platform-Version предоставляет конкретную версию Windows (например, "15.0.0" для Windows 11, "10.0.0" для Windows 10).

Среда шрифтов: Windows поставляется с сотнями шрифтов, включая Segoe UI (системный шрифт), Calibri, Cambria, Consolas, Arial, Times New Roman, Verdana, Tahoma и многие другие. Перечисление шрифтов через CSS или Canvas раскрывает этот конкретный набор.

Характеристики рендеринга: Текст может зависеть от версии браузера, графики хоста, шрифтов и display. Наблюдения Canvas нужно измерять на каждом поддерживаемом хосте, а не считать гарантированным идентификатором платформы. О том, как измерение текста превращает эти различия шрифтов и рендеринга в субпиксельный сигнал, читайте в статье Fingerprinting измерения текста: субпиксельное отслеживание: там разобрано, что раскрывает measureText() и где действуют ограничения профиля.

Метрики экрана: Типичные разрешения экрана Windows (1920x1080, 1366x768, 2560x1440) и значения devicePixelRatio (обычно 1.0 или 1.25) отличаются от macOS (где Retina-дисплеи обычно имеют DPR 2.0) и Linux (который сильно варьируется).

Хром окна: Размеры декораций окна браузера (высота заголовка, ширина полосы прокрутки, граница окна) различаются между ОС. Вычисления outerWidth - innerWidth и outerHeight - innerHeight раскрывают эти размеры.

Почему простая подмена не работает

Изменение строки User-Agent для сообщения о Windows не меняет среду шрифтов, вывод рендеринга, метрики экрана, размеры хрома окна или Client Hints. Браузер, который заявляет о Windows, но рендерит текст с характеристиками FreeType и сообщает шрифты Linux, представляет противоречивые сигналы. Эти несоответствия легко идентифицировать через анализ перекрестных сигналов.

Распространенные подходы и их ограничения

Переопределения User-Agent

Фреймворки вроде Playwright и Puppeteer позволяют устанавливать пользовательские строки User-Agent. Это изменяет HTTP-заголовок и navigator.userAgent, но оставляет все остальные сигналы без изменений. navigator.platform, списки шрифтов, вывод рендеринга и Client Hints продолжают отражать реальную ОС хоста.

Windows ВМ на Linux

Запуск Windows внутри виртуальной машины на Linux-сервере обеспечивает подлинные Windows-сигналы, но ресурсные затраты высоки. Каждой ВМ нужно 4-8 ГБ ОЗУ, выделенные ядра CPU и лицензия Windows. При масштабировании этот подход непомерно дорог по сравнению с эмуляцией на основе профилей.

Wine или уровни совместимости

Запуск Windows Chrome через Wine на Linux создает смешанную среду сигналов. Некоторые сигналы отражают Windows, другие - базовую Linux-систему. Результат - набор несоответствий, который хуже, чем запуск любой платформы нативно.

Переопределения DevTools Protocol

Chrome DevTools Protocol позволяет переопределять User-Agent и некоторые свойства платформы. Однако эти переопределения применяются после инициализации браузера и не влияют на конвейер рендеринга, систему шрифтов или ранние HTTP-заголовки вроде Client Hints при начальной навигации.

Подход BotBrowser

Профили BotBrowser, захваченные с Windows-систем, содержат документированные видимые браузеру значения. Загрузка профиля применяет эти входные значения при запуске, но результат нужно проверять в реальной сессии с учетом хоста.

Что контролирует профиль Windows

Когда вы загружаете профиль Windows 11 Chrome на Linux-сервер:

  • navigator.platform возвращает "Win32"
  • navigator.userAgent содержит "Windows NT 10.0; Win64; x64"
  • Заголовок Sec-CH-UA-Platform сообщает "Windows"
  • Sec-CH-UA-Platform-Version сообщает захваченную версию Windows
  • Доступность шрифтов можно сравнить с записью профиля в реальной сессии с учетом хоста, версии, разрешений и пути рендеринга
  • Результат проверки шрифтов сравнивается с записью профиля с учетом хоста и версии
  • Результат Canvas нужно измерять, а не предполагать совпадающим с исходным рендерером
  • WebGL зависит от графического пути хоста, если иное не описано в документации
  • Метрики экрана отражают viewport и display сессии
  • Размеры окна нужно проверять на выбранных framework и хосте

Настройка не требуется

Загрузка профиля на другой хост не устанавливает эквивалентность автоматически. Флаг --bot-profile является одним входом запуска; затем проверяйте сессию, display, framework, сеть и приложение на каждом хосте. О способе сравнить хосты, профили и стоимость выполнения до развертывания на уровне внедрения читайте в статье Оценка кроссплатформенной согласованности браузера до развертывания: там описаны матрица хостов и целей и версионируемая базовая линия.

Сочетание с Edge или Brave

Пользователи Windows обычно используют Microsoft Edge или Google Chrome. BotBrowser может применять документированные значения бренда, локали и часового пояса только в разрешенных контекстах, покрытых профилем и доступными функциями; проверяйте выбранные значения в сессии. Для поддерживаемого теста Edge:

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

Документированные значения бренда могут измениться, включая бренды User-Agent, токены Client Hints и функции; проверяйте их в реальной сессии без универсальных выводов. О том, почему User-Agent, Client Hints и navigator.userAgentData должны указывать на один бренд, читайте в статье Переключение бренда: Chrome, Edge, Brave, Opera: там описано, как задать бренд при запуске и проверить его везде.

Настройка и использование

Базовый профиль Windows на Linux

# На Linux-сервере
DISPLAY=:88 chrome \
  --bot-profile="profiles/win11-chrome-130.enc" \
  --user-data-dir="$(mktemp -d)"

Профиль Windows с US-идентичностью

DISPLAY=:88 chrome \
  --bot-profile="profiles/win11-chrome-130.enc" \
  --proxy-server=socks5://user:pass@us-proxy:1080 \
  --bot-timezone=America/New_York \
  --bot-locale=en-US \
  --bot-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-timezone=America/Chicago',
      '--bot-locale=en-US',
      '--bot-languages=en-US,en',
    ],
    headless: true,
    defaultViewport: null,
  });

  console.log('Откройте разрешенную тестовую страницу с этими параметрами.');
  await browser.close();
})();

Edge на Linux с EU-прокси

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

Проверка

Убедитесь, что Windows-профиль применен корректно, проверив несколько категорий сигналов:

const verification = {
  platform: 'Win32',
  userAgent: '...Windows NT 10.0; Win64; x64...',
  uaPlatform: 'Windows',
  platformVersion: '15.0.0',
};
console.log('Сравните эти ожидаемые значения с той же разрешенной сессией.');

Профиль браузера Windows соединяет хосты macOS и Linux с единой идентичностью

Операционный список

Разделяйте хост выполнения и профиль браузера. Записывайте ОС, версию браузера, идентификатор профиля, локаль, часовой пояс, прокси, viewport и дату каждой проверки.

Рассматривайте профиль как вход контролируемого контекста. Используйте новый каталог данных, синтетические данные и детерминированное закрытие. Профиль задает видимые браузеру значения, а cookies, хранилище, разрешения, сеть и данные приложения подчиняются жизненному циклу контекста и сервиса.

Проверяйте сетевой путь до сравнения сигналов. Подтвердите DNS, авторизацию прокси, TLS, регион и ответ сервиса. Совпадение Sec-CH-UA-Platform не доказывает связь IP или upstream-сервиса с Windows.

Проверяйте локаль и часовой пояс отдельно. Сверяйте языки, форматы, смещение и локаль приложения. Намеренное отличие фиксируйте как тестовый случай.

Стабилизируйте политику viewport и display. На Linux настройте display-сервис, а на macOS учитывайте Retina. Сравнивайте CSS-размеры и device-pixel ratio со значениями профиля.

Используйте короткий список: платформа, семейство User-Agent, Client Hints, важные шрифты, метрики экрана и локаль. Успех доказывает только эту сессию, а не универсальную совместимость.

Определите жизненный цикл и очистку. Создавайте контекст для каждой разрешенной учетной записи, не делите изменяемое хранилище между workers и сохраняйте первую ошибку. Закрытие контекста не удаляет серверные записи.

Зафиксируйте версии матрицы и повторяйте список после обновлений. Сравнивайте macOS и Linux, описывая различия GPU, путей, display и сети. BotBrowser подходит для повторяемых браузерных значений, но не является Windows VM и не заменяет прокси, шрифты, графическое оборудование или проверку приложения.

Назначьте владельца каждому наблюдению: профиль, платформа, сеть или приложение. Видимое браузеру значение не доказывает факт, которым профиль не управляет.

До сравнения документируйте ожидаемые различия. Linux-worker может использовать виртуальный display, а macOS использует Retina. Запишите допустимые диапазоны viewport и отдельно сравнивайте платформенные значения.

Когда профиль больше не нужен, следуйте политике хранения. Удаляйте только разрешенные локальные артефакты, отзывать тестовые учетные данные следует обычным процессом, а результат храните минимально. Файл профиля не является лицензией Windows или резервной копией исходной машины.

Лучшие практики

  • Выбирайте профили из текущей матрицы. Старые профили могут не соответствовать используемой версии Chrome.
  • Выбирайте прокси и локаль для сценария теста. Записывайте предполагаемые регион и часовой пояс, а ответ сети проверяйте отдельно от значений профиля.
  • Используйте display проекта только при необходимости. Новым headless-запускам DISPLAY не нужен; headed или legacy headless=old с Xvfb должны использовать DISPLAY=:88.
  • Используйте defaultViewport: null в Playwright и Puppeteer, чтобы позволить профилю контролировать размеры viewport, а не фреймворку.
  • Сочетайте с локалью и часовым поясом. Windows-профиль без соответствующих настроек локали неполон. Устанавливайте --bot-timezone, --bot-locale и --bot-languages для соответствия расположению прокси.
  • Рассмотрите Edge для покрытия. Используйте --bot-browser-brand=edge, если тест явно включает Edge, и проверяйте бренд и функции в сессии.

Часто задаваемые вопросы

Просачивается ли Linux-хост через что-либо при запуске Windows-профиля?

Нельзя предполагать полное отсутствие сигналов хоста. BotBrowser применяет документированные значения профиля, но хост, сеть и приложение нужно проверять отдельно в сессии.

Могу ли я запускать текущие профили Windows?

Да. Текущие профили Windows сообщают соответствующую версию платформы в Client Hints. Различие в основном в значении Sec-CH-UA-Platform-Version, которое захватывается из исходной системы. Сравнивайте его с записью профиля: это не доказывает, что хост является Windows.

Храните результат вместе с версией профиля и браузера и повторяйте проверку после обновлений.

Нужны ли мне Windows-шрифты, установленные на Linux-сервере?

Сравнивайте доступность шрифтов с записью профиля в реальной сессии. Шрифты хоста, версия, разрешения и путь рендеринга могут менять результат; не предполагайте фиксированный набор без проверки хоста.

Как работает разрешение экрана с профилями Windows?

Профиль может задавать ожидаемые метрики, но viewport, масштаб display, framework и оборудование хоста нужно измерять в сессии. Не предполагайте, что экран хоста скрыт или разрешение гарантировано.

Могу ли я использовать один файл профиля на разных ОС хоста?

Один и тот же файл .enc можно загрузить на хостах Linux, macOS и Windows, но результат нужно проверять для каждого хоста и версии браузера. Профиль задает видимые браузеру входные значения, а не все условия хоста.

А как насчет Windows-специфичных API вроде WMI или DirectX?

Веб-браузеры раскрывают ограниченный набор платформенных API через стандартные веб-API. BotBrowser документирует значения профиля для поддерживаемых видимых сигналов; системные API вроде WMI недоступны из веб-контента, а поведение хоста остается за пределами профиля.

Есть ли разница в производительности при запуске Windows-профилей на Linux?

Нет. Профиль контролирует, какие сигналы сообщает браузер. Фактические вычисления выполняются на оборудовании хоста с нативной скоростью.

Итоги

BotBrowser поддерживает видимые браузеру значения платформы в контролируемых контекстах для авторизованных кроссплатформенных проверок. Профиль не предоставляет операционную систему Windows и не гарантирует одинаковые результаты на всех хостах; сеть, регион, шрифты, графика и приложение остаются ответственностью команды.

Практическая граница проста: профиль задает начальные значения, видимые браузеру, а команда отвечает за прокси, DNS, разрешения, viewport, жизненный цикл фреймворка и проверки приложения. Записывайте хост и идентификатор профиля и повторяйте список после каждого обновления.

BotBrowser может настраивать видимые браузеру значения платформы для авторизованных кроссплатформенных проверок, но не предоставляет операционную систему Windows и не гарантирует одинаковый результат на всех хостах. Проверка сети, региона, шрифтов, графики и приложения остается задачей команды. См. документацию по идентичности BotBrowser.

По связанным темам см. Кроссплатформенные профили браузера, Эмуляцию Android и Переключение бренда браузера. Дополнительно см. MDN User-Agent Client Hints.

Что добавлено по сравнению со справочной страницей

Справочная страница объясняет использование профиля на разных хостах. Добавленный сценарий сравнивает платформу и регион профиля с Client Hints запроса и отмечает значения, зависящие от хоста. Так можно проверить Linux или macOS без заявления, что это машина Windows.

{ "reported": "Win32", "request": "Sec-CH-UA-Platform", "hostDependent": ["screen.width", "devicePixelRatio"] }

Источники

Практический итог

Выбирайте профиль Windows под конкретный документированный сценарий приложения, а не ради обычного вида трафика. Принимайте настройку после проверки платформы, заголовков, шрифтов, Canvas, WebGL, экрана и размеров окна на выбранном хосте и framework.

#Windows#Macos#Linux#кроссплатформенность#профили

Эта статья входит в руководство: Поверхности веб-платформы: карта проверки

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.