Headless-браузер

Headless-браузер — браузер без окна, которым управляет программа: он открывает страницы и выполняет скрипты.

Обновлено · Редакция Prokso

Страницы, которые строятся скриптами, не отдают данные обычному запросу: вместо цен там пустые блоки. Headless-браузер загружает страницу полностью, как человек в Chrome, но без окна на экране.

Самые известные инструменты — Puppeteer, Playwright и Selenium. Прокси им задают при запуске браузера.

Браузер загружает всё: картинки, шрифты, видео. Из-за этого трафика расходуется гораздо больше, чем для простого запроса. Ненужные ресурсы стоит блокировать в настройках скрипта.

Оценить, сколько выйдет по объёму, поможет калькулятор трафика.

Прокси с логином в Playwright и Puppeteer

Флаг Chrome --proxy-server принимает только хост и порт, без логина и пароля. Поэтому данные входа передают отдельно. В Playwright они идут в параметры запуска: proxy: { server: "http://gw.prokso.com:823", username: "LOGIN", password: "PASSWORD" }.

В Puppeteer браузер запускают с --proxy-server=gw.prokso.com:823 и перед открытием страницы вызывают page.authenticate({ username: "LOGIN", password: "PASSWORD" }). Другой вариант — добавить IP сервера в доступ по IP (белый список) плана, тогда логин и пароль не нужны вовсе.

Как отсечь тяжелые ресурсы

Ресурсы, которые браузер не загрузил, не проходят через прокси и не считаются трафиком. В Playwright метод page.route позволяет отменять запросы по типу: например, отклонять image, media и font, а остальное пропускать. В Puppeteer то же самое делает page.setRequestInterception(true).

Не блокируйте скрипты и запросы XHR: нужные данные обычно приходят именно через них. После настройки проверьте результат на нескольких страницах. Еще одна экономия — использовать один браузер для многих страниц вместо запуска нового каждый раз: сохраненные в кеше скрипты и стили не загружаются повторно.

Как работать с сайтами бережно

Headless-браузер загружает сайт так же, как человек, только намного быстрее. Открывайте страницы по одной или в нескольких вкладках на сайт и ждите нужный элемент через waitForSelector вместо фиксированных пауз. Перед стартом прочитайте robots.txt сайта и проверьте, нет ли у него официального API.

В Playwright каждый browser.newContext() получает свои cookies и хранилище. Закрывайте контексты, которые уже не нужны: это освобождает память и отбрасывает их cookies.

Вопросы и ответы

Когда нужен headless-браузер, а не простой запрос?

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

Как задать прокси в headless-браузере?

При запуске браузера, в параметрах Puppeteer, Playwright или Selenium. Примеры — в инструкциях.

Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ

Регистрация за минуту, доступы сразу после оплаты.

Создать аккаунт