Базовые настройки
Включаем Selenium
Практически все задачи решаются без использования хедлесс браузера (Headless browser), и в большинстве случаев использование основной механики забора страниц диггером намного быстрее, дешевле по ресурсам и предпочтительней, поскольку дает больше контроля над процессом. Но бывают случаи, когда использование полноценного браузера с выполнением JavaScript и извлечение финального рендера страницы для обработки - это единственное решение.
Для подобных случаев вы можете использовать Selenium c Chrome Web Driver, однако примите во внимание, что при запросе одной страницы, Selenium делает гораздо больше запросов к серверу, поскольку подгружаются различные вспомогательные файлы. Тарифицирутся только успешные (при отдаче сервером кода 200) запросы типа Document, а также другие типы запросов, возвращающие содержимое типа text/html, text/plain и application/json. Загрузка одной страницы в Selenium может стоить вам десятков запросов. Для включения Selenium воспользуйтесь опцией js_enabled:
# ВКЛЮЧАЕМ SELENIUM
- config:
js_enabled: "yes"
Для навигации по страницам можно использовать команду Walk. Однако нужно помнить, что при использовании этой команды в Selenium поддерживаются только GET запросы (включая итерацию по пулу ссылок).
Обратите внимание!
Работа с DOM структурой в Selenium отличается от работы с основной механикой Diggernaut. Вы все также можете использовать команду Find для навигации по DOM, однако в ряде случаев, когда вы итерируете по пулу найденных элементов, они могут быть инвалидированы, если браузер пересоздал DOM.
При заходе в блок, можно использовать все команды блокового контекста. А также некоторые дополнительные команды, которые работают только в Selenium:
Команда | Описание |
---|---|
type | Имитирует ввод текста в текущий элемент (блок). В основном используется для заполнения полей форм. |
submit | Имитирует отправку формы на выбранном элементе. В основном используется отправки заполненной формы. |
click | Имитирует клик мыши на текущем элементе. Используется для перехода по ссылкам, нажатия на кнопки, установки фокуса (курсора) на текстовых полях формы для их заполнения текстом. Внимание: при прохождении по ссылке, этой командой не генерируется новый контекст страницы, а замещается текущий. |
scrollto | Прокручивает страницу до текущего элемента. Используется для работы с элементами, если они находятся вне зоны видимости в браузере. |
execute | Исполняет переданный в аргументе js код, написанный на JavaScript. Может использоваться для того, чтобы менять состояние элементов на странице. |
fetch_content | Читает HTML содержимое текущего фрейма и кладет его в регистр. |
screenshot | Делает скриншот экрана браузера и помещает изображение, закодированное в base64 в регистр. |
#ЗАБИРАЕМ СОДЕРЖИМОЕ IFRAME И СОХРАНЯЕМ В ПЕРЕМЕННУЮ
- find:
path: 'div[id*="google_ads_iframe"] > iframe, .onf-ad iframe,[id*=moneytag] iframe, [id*=scr_] iframe, #grumi-container iframe'
do:
- fetchcontent
- variable_set: ad
#СКРЫВАЕМ ЛИПКУЮ ПАНЕЛЬ СВЕРХУ СТРАНИЦЫ
- execute:
js: "document.querySelector('[data-widget=\"webStickyProducts\"] > div').hidden = true;"
# НАХОДИМ ТЕКСТОВОЕ ПОЛЕ
- find:
path: input[name="username"]
do:
# ПРОКРУЧИВАЕМ СТРАНИЦУ ДО ПОЛЯ
- scrollto
# УСТАНАВЛИВАЕМ КУРСОР В ПОЛЕ
- click
# ЗАПОЛНЯЕМ ПОЛЕ ТЕКСТОМ
- type: iamyouruser
# ОТПРАВЛЯЕМ ФОРМУ
- submit
Если вы включили опцию поддержки Selenium, вы также можете работать используя и стандартную механику забора страниц. Для этого нужно переключить используемый в данный момент механизм. А когда потребуется Selenium, снова переключиться на него. Это позволит вам строить приложения для работы с разными источниками и API в пределах одного диггера. Для переключения используется команда set_engine.
# ПЕРЕКЛЮЧАЕМСЯ НА СТАНДАРТНЫЙ МЕХАНИЗМ
- set_engine: surf
# ПЕРЕКЛЮЧАЕМСЯ НА SELENIUM
- set_engine: selenium