К содержимому

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

Агенту, который работает с облачного сервера, часто отказывают. Что решает мобильный IP, как подключить его в Playwright, и где его пределы.

update Обновлено

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

Проблема

Адрес хостинга говорит сайту: «это не человек». Многие сайты отвечают капчей, страницей проверки или прямым отказом. Некоторые сервисы защиты даже предлагают сайтам блокировать ИИ-роботов по умолчанию.

Французская мобильная линия даёт агенту адрес абонента оператора. Самый грубый фильтр, тот, что судит только по адресу, его больше не отклоняет.

Чего эта страница делать не советует

Сайт, который отказывает роботам своими условиями, своим robots.txt или своей защитой от роботов, уже дал ответ. Мобильный адрес его не меняет.

Эта страница адресована сценариям, где агент действует от вашего имени там, где у вас есть право действовать: ваши аккаунты, ваши инструменты, ваши собственные сайты, порталы ваших партнёров или тесты качества вашего сервиса. Рамки для сбора общедоступных данных описаны в статье Мониторинг цен и сбор данных.

Подключение прокси

Адреса и данные для входа находятся на карточке прокси, в Мои прокси.

Playwright (Python)

browser = playwright.chromium.launch(proxy={
    "server": "http://HOST:PORT",
    "username": "USERNAME",
    "password": "PASSWORD",
})
context = browser.new_context(locale="fr-FR", timezone_id="Europe/Paris")

locale и timezone_id заставляют страницы, даты и цены отображаться так, как для французского посетителя.

Puppeteer (Node.js)

const browser = await puppeteer.launch({ args: ["--proxy-server=http://HOST:PORT"] });
const page = await browser.newPage();
await page.authenticate({ username: "USERNAME", password: "PASSWORD" });

Простые HTTP-запросы (Python, requests)

proxies = {"https": "socks5h://USERNAME:PASSWORD@HOST:PORT"}
requests.get("https://exemple.fr", proxies=proxies, timeout=30)

Буква h в socks5h заставляет разрешать имена через прокси: без неё ваши DNS-запросы уходят через сервер. Нужен пакет requests[socks].

Ловушки

Адрес лишь один сигнал из многих. Браузер без интерфейса (headless) распознаётся по другим признакам, помимо IP. Если вашему агенту отказывают при хорошем адресе, проблема в другом.

WebRTC. Автоматизированный браузер может раскрыть адрес сервера через WebRTC, в обход прокси. См. Утечки WebRTC и DNS или пропустите весь сервер через туннель WireGuard.

Один агент, один прокси. Несколько агентов, действующих в разных аккаунтах через один адрес, оказываются связаны. Дайте отдельную линию каждому контексту, который должен оставаться отдельным; см. Разделять свои занятия.

Менять IP в нужный момент. Никогда посреди сессии с выполненным входом: сайт увидел бы, как один и тот же аккаунт прыгает с адреса на адрес. Ротацией управляют через API, между двумя задачами; см. Смена IP.

Какой тариф

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

FAQ

HTTP или SOCKS5 для автоматизированного браузера?

Работают оба. Chromium не принимает логин в адресе прокси SOCKS5, поэтому в примерах выше используется HTTP. См. HTTP или SOCKS5?.

Мой агент работает у меня дома, а не на сервере. Нужен ли он мне?

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


См. также: Частые ошибки · Проверка прокси

Нужен французский мобильный прокси? Настоящая французская линия 4G/5G, порт HTTP и порт SOCKS5, смена IP по запросу.

Посмотреть тарифыarrow_forward
grid_viewВики