Что такое безголовый браузер? Помогают ли они или мешают экспедиции по сбору данных?
Безголовый браузер - это веб-браузер без графического интерфейса пользователя (GUI). Он не имеет видимого окна или элемента пользовательского интерфейса.
Вы просто используете скрипты для обработки содержимого страницы.
Это означает, что вы можете затевать всякие пакости.
Но сегодня мы поговорим только о "белых" методах.
Что особенного в безголовом браузере?
- Более быстрое взаимодействие с веб-контентом - это значит, что вы можете получить больше нужных данных.
- Не требует большой пропускной способности и времени для загрузки страницы, а значит, вам не придется ждать.
- Звучит круто, в духе "Сонной лощины", что очень круто.

Для чего используется безголовый браузер?
Браузеры без графического интерфейса обеспечивают удобный доступ к DOM (объектной модели документа) веб-страницы, что полезно для фронтенд-разработчиков, использующих JavaScript-фреймворки, такие как AngularJS.
Они также широко используются для загрузки и запуска функциональных веб-страниц на безголовом сервере в процессе автоматизированного тестирования. Это называется тестированием в безголовом браузере.
Тестирование безголовых браузеров
Безголовое тестирование - это техника автоматизации тестирования, используемая для проверки веб-страниц. Программа управляет веб-браузером с помощью автоматики, скриптов или других инструментов без отрисовки графики и выполнения видимых компонентов пользовательского интерфейса. Целью безголового тестирования браузера может быть:
- Проверка достоверности разметки, содержимого и стиля HTML/XHTML-страницы.
- Валидация веб-формы или формы входа в систему.
- Анализ использования JavaScript для обработчиков событий и операций AJAX.
Это необходимо для того, чтобы убедиться в том, что динамическое содержимое отображается на экране с правильным позиционированием и т.д.
Безголовые браузеры хорошо сочетаются и с другим программным обеспечением. Помимо тестирования и веб-разработки, они могут облегчить сбор данных.
Безголовый скриптинг браузера
«Скрейпинг без интерфейса» — это метод автоматического извлечения данных, который можно использовать в сочетании с веб-скрейпером.
Браузер в безголовом режиме:
- Соскабливает веб-сайты и сохраняет веб-данные в локальном каталоге на диске.
- Извлекает несколько страниц с большинства современных веб-сайтов.
- Имитирует профиль пользовательского агента, необходимый для выполнения рендеринга с использованием JavaScript.
- Более эффективное использование аргументов командной строки.
Например, безголовые браузеры обычно используются для поиска данных из онлайн-каталогов, информации о ценах на сайтах электронной коммерции или виджетов/иконок социальных сетей, встроенных в сайт компании.
Какие существуют популярные безголовые браузеры?

Безголовый хром
Безголовая версия браузера Google Chrome.
Безголовый Firefox
Проект Mozilla, цель которого — создать «безграфическую» сборку своего новейшего веб-браузера с включенной поддержкой WebGL и JavaScript.


HtlmUnit
Фреймворк для функционального тестирования, использующий безголовые браузеры для загрузки и проверки веб-страниц.
SimpleBrowser
Безголовый браузер, созданный на базе программного обеспечения Net 4, способный выполнять действия по автоматизации браузера. Он не позволяет использовать JavaScript, но позволяет изменять агент пользователя, реферер, заголовки запросов, значения форм и др. перед отправкой или навигацией.


SlimerJS
Проект Mozilla, направленный на обеспечение работы JavaScript и HTML5 в среде, подобной файловой системе. В качестве ядра он использует Gecko (браузерный движок, лежащий в основе Firefox). Это позволит ему полностью поддерживать все API JavaScript (например, даже если они не реализованы или в чем-то неполны).
ZombieJS
Zombie предоставляет API на JavaScript и использует Chromium. Chromium может запускаться на различных веб-страницах, но в основном используется для автоматического тестирования API DOM и поведения веб-сайтов.

Как использовать безголовый просмотр для веб-скрапинга?
Назначение безголового браузера - автоматизация (функциональных тестов, веб-разработки и т.д.). Кроме того, благодаря простоте использования и возможности выполнять задачи без участия человека они являются отличными инструментами для веб-скрапинга.

При использовании безголовых браузеров для веб-скрапинга необходимо передать браузеру список URL-адресов, а затем дождаться его загрузки. При загрузке в безголовый браузер это можно автоматизировать, отправляя команды безголовому браузеру из командной строки.
Он позволяет полностью контролировать, когда и как URL-адреса попадают в безголовый браузер.
Для сбора информации с сайтов с помощью headless-браузера необходимо добавить в приложение библиотеки, чтобы браузер мог взаимодействовать с ними. Это взаимодействие может осуществляться через командную строку или путем подключения к веб-серверу.
Наиболее распространенными библиотеками являются:
Запросы
Необходимая библиотека Python для взаимодействия с веб-серверами посредством HTTP-запросов.


jsdom
Для работы этой библиотеки также необходим пакет jsdom-global, который используется для создания глобальных объектов, необходимых безголовому браузеру.
Puppeteer
Библиотека Puppeteer упрощает управление Chrome и Chromium по сравнению с другими библиотеками, такими как Selenium/WebDriver. Её можно установить с помощью npm или yarn в приложениях Node.js для запуска тестов или сбора данных с веб-страниц. Она предоставляет методы для указания URL-адреса, загрузки ресурсов, работы с файлами cookie и т. д.

Необходимо помнить, что Puppeteer - это библиотека, основанная на обещаниях: Она выполняет асинхронные вызовы к безголовому экземпляру Chrome в моторном отсеке.

Кошмар
Эта библиотека предназначена для приложений Electron. Она предоставляет Electron инструменты автоматизации, с помощью которых приложение может управлять браузерным процессом Electron через удаленное соединение.
Selenium
Существует несколько библиотек для работы с безголовым JavaScript с использованием связки Selenium, таких как webdriver js и selenium-web driver.

Вы, наверное, думаете, что создать библиотеку очень сложно, но это не так. Давайте рассмотрим один пример.
Учебник по основам кукловодства

Сначала необходимо установить Puppeteer в каталог проекта.
Установка Puppeteer
Чтобы использовать Puppeteer в безголовом браузере, выполните команду:
npm i puppeteer
# or "yarn add puppeteer"
Или для получения lite-версии Puppeteer выполните команду:
npm i puppeteer-core
# or "yarn add puppeteer-core"
Как уже говорилось выше, весь код кукловода выполняется в NodeJS. Вы экспортируете его как фабричную функцию, которая возвращает объект с методами для управления Chrome. С его помощью можно создавать новые экземпляры браузера с помощью метода launch, переходить по URL-адресам, обрабатывать события и т.д.
Следующий фрагмент кода предназначен для сценария Puppeteer.
Если вы хотите , перейдите по адресу https://example.com и сохраните снимок экрана под именем example.png:
Сохраните файл под именем example.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
Выполнение сценария в командной строке:
node example.js
Если вы хотите создать PDF-файл:
Сохраните файл под именем hn.js.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {
waitUntil: 'networkidle2',
});
await page.pdf({ path: 'hn.pdf', format: 'a4' });
await browser.close();
})();
Неплохое решение, правда?
Приведенный выше пример является лишь одним фрагментом кода. Более подробное руководство по Puppeteer можно найти здесь.
Какие ограничения существуют при использовании веб-скрапера в безголовом браузере?
Как правило, возможности управления «безголовым» сервером ограничены, поскольку для выполнения многих задач требуются дополнительные плагины или настройки, которые обычно осуществляются через стандартный веб-браузер. Например, некоторые «безголовые» браузеры не поддерживают CSS-селекторы, что затрудняет извлечение данных из DOM.
Несмотря на то что браузер без интерфейса работает эффективно, блокировки веб-сайтов могут замедлить вашу работу. В зависимости от того, сколько страниц вы планируете сканировать, вам следует подумать об использовании прокси-сервиса. Прокси-сервис поможет защитить ваш IP-адрес от возможной блокировки.
Лучшие прокси-серверы для использования в режиме headless
Если все ваши API-вызовы и HTTP-запросы выполняются с одного IP-адреса, то весь процесс будет остановлен.
Лучшими прокси-серверами для использования с веб-скраперами являются вращающиеся прокси. Таким образом, каждый экземпляр браузера имеет свой IP-адрес.
Вращающиеся прокси-серверы для частного использования, или прокси с обратным подключением, идеально подходят для автоматизированного тестирования и веб-приложений, занимающихся сбором данных.
Хотите узнать больше о прокси-серверах для веб-парсинга с использованием браузера без графического интерфейса? Ознакомьтесь с этой статьёй о том, сколько прокси-серверов вам понадобится.

В этой статье мы рассказали о том, что такое безголовые браузеры и почему они могут быть полезны для тех, кто хочет использовать их в качестве инструмента для скраппинга.
Если у вас есть дополнительные вопросы о безголовых браузерах или о чем-либо, связанном с веб-скрапингом, не стесняйтесь оставлять комментарии ниже!
ВОПРОСЫ И ОТВЕТЫ
С чего начать?
Просто выберите безголовый браузер, который хорошо подходит для ваших задач автоматизации веб-деятельности. Существует целый ряд безголовых браузеров, таких как Headless Chromium и SlimerJS. Вам также понадобится библиотека. Например, если вы планируете использовать Chrome, вам необходимо установить библиотеку Puppeteer.
Почему браузер называется "безголовым"?
Безголовый браузер не имеет графического интерфейса пользователя (GLU), единственное, что вы увидите при его работе, - это интерфейс командной строки (CLI). Веб-разработчики используют его для выполнения автоматизированных задач, таких как функциональные тесты и веб-скрапинг.
CLI headless-браузера позволяет загружать веб-сайты и взаимодействовать с ними. По сути, он выступает в роли настраиваемого прокси-сервера между вами и веб-сайтами, которые вы загружаете на свой headless-сервер. Если вы новичок в области веб-скрапинга или безголовых браузеров, эта статья расскажет вам об их основах. Она может оказаться полезной, если вы только начинаете.
Кто создал Headless Chrome?
Headless Chrome - это проект с открытым исходным кодом, возглавляемый компанией Google.
Могу ли я использовать его для целей, отличных от автоматического веб-скрапинга?
Да! С его помощью можно выполнять автоматическое и функциональное тестирование. Прежде чем принять решение о том, какой именно headless-сервер лучше всего отвечает вашим потребностям, следует рассмотреть все возможные варианты.
Поскольку их цель - автоматизация, безголовые браузеры являются отличными инструментами для скраппинга, особенно в сочетании с интерфейсом командной строки.
Можно ли запускать безголовые браузеры из командной строки?
Да. Многие headless-серверы позволяют запускать их из соответствующего CLI или через веб-интерфейс, например Chrome. В некоторых случаях для получения полного контроля над headless-браузером необходимо использовать оба варианта.
Как узнать, работает ли безголовый браузер на моем компьютере?
Вы можете посмотреть, на какой архитектуре работает ваша локальная система, и сравнить ее с архитектурой любого безголового браузера, который вы хотели бы использовать. Некоторые безголовые серверы являются кроссплатформенными или поддерживают несколько архитектур, но не все они работают таким образом. Прежде чем использовать один из них, необходимо проверить это.
Правда ли, что безголовые браузеры не поддерживают CSS-селекторы?
Это справедливо для некоторых (но не для всех) безголовых серверов; в частности, PhantomJS не поддерживает CSS-селекторы, а Headless Chrome - поддерживает. Разработчики каждого безголового браузера могут в любой момент времени добавить и/или убрать различные функции, поэтому всегда следует проверять, прежде чем что-то предполагать.
Работают ли безголовые браузеры с javascript-кодом?
В большинстве случаев безголовые браузеры не испытывают проблем с выполнением javascript-кода. Многие веб-разработчики используют безголовые браузеры для автоматизации своих задач, требуя для их выполнения полной поддержки JavaScript.
Поскольку не все безголовые браузеры поддерживают JavaScript, необходимо изучить каждый из них и определить, будет ли он удовлетворять вашим конкретным потребностям.
Правда ли, что некоторые headless-серверы имеют API?
Да! Некоторые «безголовые» серверы имеют API, которые позволяют использовать их не только для загрузки веб-сайтов через прокси-сервер. Вы можете узнать, какие типы API предлагает тот или иной «безголовый» браузер, ознакомившись с его документацией. Это хороший способ определить, стоит ли использовать их с веб-скрейперами, особенно если доступен прокси-API.
Какие безголовые браузеры поддерживают CSS-селекторы?
В настоящее время Headless Chrome поддерживает CSS-селекторы, в то время как движок WebKit в PhantomJS их не поддерживает. Более подробную информацию о системных зависимостях можно найти на этом сайте.
Почему не все инструменты для веб-скрапинга считаются безголовыми браузерами?
Такие инструменты, как Scrapy, имитируют пользовательский интерфейс (UI) обычного браузера для сбора данных с сайтов. Однако, поскольку эти инструменты не загружают страницы в собственное окно, мы не относим их к безголовым браузерам.
Правда ли, что нельзя использовать безголовые браузеры для сканирования мобильных сайтов?
Не гарантируется, что безголовые браузеры будут работать со всеми страницами сайтов, но большинство из них могут работать нормально. Сайты, предназначенные для мобильных устройств, как правило, не загружаются корректно в безголовых серверах, даже если они могут отобразить страницу.
Могу ли я тестировать свои собственные безголовые браузеры?
Вы должны иметь такую возможность, но нет никакой гарантии, что headless-браузер будет работать. Поскольку каждый headless-сервер обладает различной функциональностью и возможностями, возможно, придется модифицировать свой инструмент, чтобы он работал корректно.
В качестве простого примера можно привести то, что для работы «безграфического» Chrome требуется JavaScript, а для правильной загрузки веб-страниц в PhantomJS необходимы заголовки CORS.
Каковы наилучшие методы, которые я могу использовать при скраппинге с помощью безголового браузера?
Целью веб-скрапинга обычно является извлечение данных с полностью или частично недоступных сайтов без ручного ввода каких-либо веб-данных в формы или кнопки.
Если вы хотите узнать больше о том, как работает веб-скрейпинг, ознакомьтесь с этой статьёй.
Использование безголового браузера должно быть этичным. Возможность извлекать данные из полностью или частично недоступных страниц - это не обязательно плохо. Однако это может произойти, если владелец сайта не хочет, чтобы вы это делали.
Обязательно перепроверьте все соглашения об условиях предоставления услуг и политике конфиденциальности, прежде чем приступать к соскабливанию страниц какого-либо сайта, поскольку эти условия могут быть изменены без предварительного уведомления.
Какие безголовые браузеры лучше всего подходят для веб-скрапинга?
Headless Chrome и PhantomJS - отличные варианты для веб-скрапинга, поскольку они просты в использовании и относительно быстры.
Почему некоторые разработчики предпочитают использовать безголовый браузер, а не обычный?
Иногда бывает необходимо или удобнее использовать безголовый браузер вместо обычного, но это, как правило, зависит от специфики проекта. Например, вы хотите собрать данные с сайтов, для корректной работы которых требуется Javascript. В этом случае вам будет проще использовать Headless Chrome, чем обычный Google Chrome.
Headless Chrome обладает более широкими возможностями отслеживания, чем другие аналогичные инструменты, что очень удобно при работе с несколькими проектами.
