Использование резидентных прокси с browser-use
Опубликовано: 23 июля 2026 · 6 мин чтения
Коротко: browser-use позволяет LLM управлять настоящим браузером Chromium для выполнения задач, поэтому его отпечаток уже выглядит по-человечески — но он всё равно выходит с IP дата-центра вашего сервера, который анти-бот системы замечают сразу. Передайте резидентный прокси через конфигурацию прокси Playwright: {"server": "http://gw.roamproxy.com:41080", "username": ..., "password": ...}. Когда вы запускаете много агентов одновременно, дайте каждому свою sticky-сессию резидентного IP, чтобы их не связывали друг с другом.
У агента настоящий браузер, но сеть выглядит поддельно
browser-use передаёт управление настоящим браузером Chromium LLM, которая кликает, печатает и читает страницы, чтобы выполнить задачу, описанную вами простым языком. Поскольку это настоящий браузер, отпечаток — TLS-рукопожатие, среда JavaScript, рендеринг — реальный. Это большая фора по сравнению с обычным HTTP-скрапером.
Но браузер работает где-то, и это «где-то» обычно облачная виртуальная машина с IP дата-центра. Анти-бот системы оценивают ASN исходящего IP раньше, чем что-либо ещё, что делает браузер, так что идеальный браузер, выходящий из диапазона AWS или Hetzner, всё равно помечается. Единственный уровень, который browser-use сам исправить не может, — это сеть, из которой он выходит. Это работа прокси.
Установка
pip install browser-use
playwright install chromium
Направьте агента через резидентный прокси
browser-use передаёт настройки прокси напрямую в Playwright, поэтому значение — это словарь прокси Playwright: простой URL server плюс отдельные ключи username и password. Не встраивайте учётные данные в URL server — Playwright читает их из отдельных полей.
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
browser = Browser(
config=BrowserConfig(
proxy={
"server": "http://gw.roamproxy.com:41080",
"username": "YOUR_USERNAME",
"password": "YOUR_PASSWORD",
}
)
)
agent = Agent(
task="Open example.com and summarize what the company does",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
await agent.run()
Теперь браузер агента выходит с реального IP домашнего интернет-провайдера. LLM по-прежнему решает, что делать; прокси решает, как трафик выглядит на проводе, и настраиваются они независимо друг от друга.
Название класса-обёртки меняется между версиями browser-use (BrowserConfig, BrowserProfile, BrowserSession). Часть, которая никогда не меняется, — это форма словаря прокси, показанная выше, — server / username / password. Если новая версия переименует обёртку, сохраните словарь и проверьте актуальную документацию, где теперь находится это место.
Один IP на агента, когда их много
Интересное применение browser-use — запуск целого флота агентов: один на аккаунт, один на задачу, один на рынок. Если все они делят один исходящий IP, посещаемые сайты могут их связать, и вы воссоздадите ровно тот след, которого пытались избежать. Дайте каждому агенту свою sticky-сессию резидентного IP, чтобы его исходящий IP был стабильным и отдельным на всё время задачи.
Сессия выбирается в имени пользователя прокси; см. что такое прокси с ротацией о том, как строка сессии управляет ротацией или sticky-режимом IP. Назначьте разную sticky-сессию каждому агенту, и никакие два агента никогда не разделят исходящий IP.
Проверьте исходящий IP, прежде чем доверять ему
Направьте первую задачу агента на страницу проверки IP и считайте результат:
agent = Agent(
task="Go to https://ip.sb and tell me the IP address and country shown",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
print(await agent.run())
Должен быть указан резидентный исходящий IP Roam и выбранная вами страна, а не реальный адрес вашего сервера. Если показан ваш реальный IP, конфигурация прокси не дошла до Playwright — перепроверьте форму словаря и к какому объекту вы его подключили.
Когда одного браузера недостаточно
browser-use решает вопрос отпечатка, используя настоящий браузер, а резидентный прокси решает вопрос IP. Для скриптового (не агентного) скрапинга, где вы не используете настоящий браузер — обычных HTTP-запросов Python, — вы теряете преимущество отпечатка и должны восстановить его другим способом; см. обход TLS/JA3-фингерпринтинга с curl_cffi. О более широком наборе причин, по которым блокируют запросы, см. как избежать блокировок при веб-скрапинге.
Частые вопросы
browser-use и так выглядит по-человечески — зачем добавлять прокси?
Его браузер выглядит по-человечески, потому что управляет настоящим экземпляром Chromium, поэтому отпечаток подлинный. Но сеть — нет: запрос всё равно выходит оттуда, где вы запускаете агента, а это обычно облачный сервер в ASN дата-центра, который анти-бот системы помечают раньше, чем успевают оценить что-либо ещё. Прокси исправляет тот уровень, который браузер сам исправить не может — исходящий IP. Именно реальный отпечаток плюс реальный резидентный IP проходит проверку.
Я запускаю 20 агентов параллельно — им нужны разные IP?
Да, если сайты не должны их связывать. Двадцать агентов за одним IP выглядят как двадцать сессий с одной машины — а это ровно та закономерность, которая связывает аккаунты или запускает ограничения по частоте запросов. Дайте каждому агенту собственную sticky-сессию резидентного IP, чтобы у каждого был стабильный, отдельный исходящий IP на всё время задачи. Roam выставляет счёт за гигабайты, а не за IP или за агента, так что увеличение числа агентов не умножает подписку.
Прокси работает одинаково на любом LLM-бэкенде?
Да. Прокси находится на уровне браузера, поэтому он полностью независим от того, какая модель управляет агентом — OpenAI, Anthropic, локальная модель, что угодно, что вы передаёте как llm. LLM решает, что делать; браузер (и его прокси) решает, как трафик выглядит на проводе. Их настраивают отдельно друг от друга.
Конфигурация прокси в моём агенте игнорируется — в чём дело?
Самая частая причина — передача прокси не тому объекту. Обёрточный API browser-use менялся между версиями (BrowserConfig, BrowserProfile, BrowserSession), но значение, которое вы передаёте, всегда остаётся словарём прокси Playwright — server, username, password как отдельные ключи, где server — это простой http://host:port без встроенных учётных данных в URL. Если вы поместите user:pass@host в строку server, Playwright проигнорирует авторизацию. Проверьте актуальную документацию browser-use для точного названия обёртки, но сохраните форму словаря, показанную здесь.
browser-use даёт вашему агенту настоящий браузер; Roam даёт ему настоящую сетевую идентичность. Резидентные IP с ротацией по $2/ГБ и статичные резидентные по $4/IP в месяц, через HTTP и SOCKS5, встраиваются прямо в конфигурацию прокси Playwright ниже. Создайте аккаунт и получите 300 МБ бесплатного пробного трафика, чтобы запустить первого агента через резидентный исходящий узел.