Короткие ответы
Где задаётся прокси в Playwright?
Передайте объект proxy при запуске браузера или создании контекста. Поле server содержит адрес шлюза. Для HTTP-прокси с авторизацией отдельно передаются username и password. Страницы используют настройки своего контекста.
Подходит ли httpCredentials для пароля прокси?
Нет. Это авторизация на сайте назначения. Пароль шлюза относится к объекту proxy. Учётные данные формы входа сайта и сохранённое состояние браузера — ещё два отдельных элемента настройки сценария.
Можно ли назначить разный прокси каждой вкладке?
Для разных настроек создайте разные контексты и открывайте страницы внутри нужного. Новая вкладка существующего контекста использует его конфигурацию. Само создание страницы не меняет маршрут и не выбирает новую сессию шлюза.
Какой протокол использовать с паролем?
В этом примере используется HTTP-шлюз. Поддержка SOCKS в браузере не означает одинаковую поддержку SOCKS-авторизации во всех движках. Следуйте документации своей версии и не переносите поведение curl на браузер без проверки.
Начните с проверенного подключения
Для проверки отображения сайта в регионе, собственного интерфейса или другого разрешённого сценария сначала выполните небольшой запрос через curl. Это помогает отделить настройки браузера от неверного пароля или отсутствия доступного выхода. Сохраните параметры успешной проверки и используйте их в первом запуске Playwright.
В конструкторе подключения — на английском выберите HTTP, пул и доступную страну. Для последовательности связанных шагов задайте sticky-сессию. Передайте полное сгенерированное имя в PROXY_USER, пароль — в PROXY_PASSWORD через систему секретов рабочего окружения. Не размещайте их в репозитории, конфигурации общего проекта или командной строке, сохраняемой в истории.
npm install playwright
npx playwright install chromiumБиблиотеке нужен поддерживаемый Node.js и соответствующая сборка браузера. В контейнере также должны быть системные зависимости браузера; установки на компьютере разработчика недостаточно. Процедура описана в руководстве установки Playwright — на английском. Сначала запустите один контекст без фильтрации ресурсов, дополнительных работников и повторов, затем усложняйте проверку по одному условию.
Откройте echo-сервис через страницу
Сохраните пример как proxy-check.mjs. Переменная PROXY_SERVER, если нужна, содержит схему, хост и порт без учётных данных. Имя и пароль передаются отдельными полями, поэтому специальные символы пароля не становятся частью URL. Запустите файл командой node proxy-check.mjs из окружения с установленной библиотекой и Chromium.
Код приведён без изменений; проверен синтаксис, но не полный браузерный запуск через прокси.
import { chromium } from 'playwright';
function required(name) {
const value = process.env[name];
if (!value) throw new Error('Missing ' + name);
return value;
}
async function main() {
const proxy = {
server: process.env.PROXY_SERVER ?? 'http://gw.portproof.org:7000',
username: required('PROXY_USER'),
password: required('PROXY_PASSWORD'),
};
const browser = await chromium.launch({ headless: true });
try {
const context = await browser.newContext({ proxy });
try {
const page = await context.newPage();
const response = await page.goto('https://api.portproof.org/v1/echo-ip', {
waitUntil: 'domcontentloaded',
timeout: 30_000,
});
if (!response || !response.ok()) {
throw new Error('Echo did not return a successful HTTP status');
}
const payload = JSON.parse(await page.locator('body').innerText());
if (typeof payload.ip !== 'string') {
throw new Error('Echo did not return an IP address');
}
console.log('HTTP', response.status(), 'exit', payload.ip);
} finally {
await context.close();
}
} finally {
await browser.close();
}
}
main().catch((error) => {
console.error('Browser check failed:', error.name);
process.exitCode = 1;
});Навигация выполняется страницей в настроенном контексте. Именно этот путь нужен для проверки браузерного сценария. Вызов Node.js fetch рядом с браузером проверял бы другой клиент, если не настроить его отдельно. Скрипт печатает код ответа и ваш выходной адрес. Он закрывает контекст перед браузером, включая обработку ошибки запроса.
Настройки соответствуют руководству HTTP-прокси и параметрам browser.newContext; документация на английском. Для HTTPS-сайта HTTP-прокси открывает CONNECT-туннель. Не меняйте схему шлюза на HTTPS только из-за адреса страницы. TLS сайта и HTTP-подключение к шлюзу относятся к разным участкам соединения.
Выберите область действия настроек
Параметр proxy в chromium.launch удобен, когда все контексты должны использовать одну конфигурацию. Параметр в browser.newContext задаёт маршрут для конкретного контекста. В первом варианте реализации выберите одну понятную область действия. Сочетание нескольких уровней усложняет поиск причины, если фактический маршрут отличается от ожидаемого.
Контекст отделяет cookie и другое состояние браузера. Sticky-сессия шлюза — иной механизм, выбранный в имени пользователя. Для независимых пользовательских сценариев создавайте отдельные контексты и при необходимости отдельные имена сессий. Для связанных шагов одного сценария сохраняйте тот же контекст, иначе можно потерять вход на сайт и данные предыдущего шага.
Пересоздание контекста само по себе не обещает новый адрес. Сохранение sticky-сессии также не обещает неизменный IP: устройство может остаться тем же, а оператор — назначить другой адрес. Записывайте, какой контекст и имя сессии принадлежат заданию. После разрыва явно решайте, можно ли продолжить последовательность. Подробности — в руководстве по сессиям и ротации.
Настройте отдельно Playwright Test
Предыдущий файл использует самостоятельную библиотеку. Если набор тестов запускается через @playwright/test, параметры обычно добавляют в use.proxy существующего конфигурационного файла. Запуск отдельного скрипта не меняет настройки тестового раннера и не распространяет прокси на параллельно запущенные задания.
import { defineConfig } from '@playwright/test';
const username = process.env.PROXY_USER;
const password = process.env.PROXY_PASSWORD;
if (!username || !password) throw new Error('Proxy credentials are required');
export default defineConfig({
use: {
proxy: {
server: process.env.PROXY_SERVER ?? 'http://gw.portproof.org:7000',
username,
password,
},
},
});Сохраните существующие проекты, устройства, базовый URL и другие параметры вашего набора, добавляя только нужную настройку. Не заменяйте весь файл этим фрагментом без проверки. На этапе проверки маршрута уменьшите число работников и повторов. Одна неверная конфигурация, размноженная на десятки тестов, расходует трафик и создаёт много одинаковых ошибок.
Проверьте содержание и границы ожидания
Успешный ответ echo показывает маршрут этой навигации. Следующий шаг — одна разрешённая страница приложения и проверка значимого элемента: нужного товара, валюты, состояния формы или заголовка раздела. Ответ HTTP 200 может содержать страницу входа, сообщение об ошибке или другой рынок. Считайте успехом только результат, соответствующий условиям вашего теста.
Обычный HTTP-статус ошибки сам по себе не заставляет page.goto выбросить исключение. Проверяйте ответ и состояние приложения, как объясняет справочник навигации — на английском. Дожидаться полного прекращения всей сетевой активности часто непрактично: приложение может постоянно обмениваться данными. После ограниченной навигации проверяйте конкретный элемент или условие.
Тридцать секунд в примере относятся к page.goto. Это не общий срок всего процесса: запуск браузера, чтение текста страницы и закрытие имеют собственный жизненный цикл. В рабочем задании задайте общий срок выполнения отдельно. Пример читает небольшой echo-ответ через тело страницы и не вводит отдельный предел размера загружаемых данных. Он не предназначен для измерения тяжёлой страницы без дополнительных ограничений.
Для регионального QA фиксируйте страну маршрута, язык, часовой пояс, состояние аккаунта и тестовые данные. Сайт может учитывать несколько сигналов одновременно. Изменение маршрута не сбрасывает cookie и не меняет язык браузера. Причины расхождений разобраны в руководстве о неверной стране — на английском.
Исправляйте причину, сохраняя проверку TLS
| Наблюдение | Что проверить |
|---|---|
| 407 или ошибка авторизации | Имя и пароль должны быть в proxy; проверьте их и баланс. |
| ERR_TUNNEL_CONNECTION_FAILED | Схему, HTTP-порт, доступность страны и тот же запрос через curl. |
| Таймаут навигации | Сначала echo, затем готовность нужного состояния приложения. |
| Ошибка сертификата | Имя сайта, цепочку сертификатов и доверие на рабочей машине. |
| Работает локально, но не в CI | Установку браузера, системные библиотеки и передачу секретов работнику. |
| Отображается прежний аккаунт | Выбранный контекст и загруженное storage state. |
Не отключайте проверку HTTPS для исправления прокси-авторизации: это разные этапы. Используйте руководство по ошибке 407 или разбор CONNECT — на английском. Подробные исключения исследуйте локально. Проверьте содержимое журналов, трассировок и снимков перед передачей другому человеку.
Сохранённое состояние браузера может содержать cookie, предоставляющие доступ к аккаунту. Такие файлы нельзя включать в открытый репозиторий или общие артефакты сборки. Меры обращения с ними описаны в документации авторизации Playwright — на английском. Новый прокси не удаляет эти данные и не меняет права доступа пользователя.
Что проверено и как оценить расход
Код совпадает с английским руководством и прошёл только проверку синтаксиса. Полная браузерная проверка через рабочий шлюз для этого примера не проводилась. Не следует воспринимать пример как измерение успешности, скорости или доступности пула. Выполните собственную небольшую проверку в той среде, где будет работать ваш тест.
Браузер получает изображения, шрифты, скрипты и другие ресурсы вместе с документом. Сначала измерьте проходящий сценарий, затем отключайте только ненужные для него загрузки. Визуальный тест без шрифтов и изображений проверяет другое отображение. Для данных из разрешённого HTTP-интерфейса может подойти Node.js fetch. Планирование расхода описано в руководстве по трафику — на английском.
Допустимое использование
Запускайте браузерные сценарии с разрешения владельца ресурса, соблюдая условия доступа и ограничения частоты. Политика допустимого использования — на английском.