Запуск профилей 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('Сравните эти ожидаемые значения с той же разрешенной сессией.');
Операционный список
Разделяйте хост выполнения и профиль браузера. Записывайте ОС, версию браузера, идентификатор профиля, локаль, часовой пояс, прокси, 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 или legacyheadless=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.
Эта статья входит в руководство: Поверхности веб-платформы: карта проверки
Похожие статьи
Кроссплатформенные профили: одна идентичность на каждом хосте
ПлатформаОценка кроссплатформенной согласованности браузера до развертывания
СетьНастройка прокси браузера: руководство по SOCKS5, HTTP и HTTPS
ОтпечаткиСнятие отпечатков WebGPU: следующее поколение отслеживания GPU
ОтпечаткиFingerprinting измерения текста: субпиксельное отслеживание
ИдентичностьПереключение бренда: Chrome, Edge, Brave, Opera
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.