Базовые настройки

Включаем 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