Selenium

Сканирование с использованием Selenium применяется для обхода защит от ботов. Как правило, при первом посещении, прежде чем допустить пользователя до реального содержимого сайта, такие системы защиты сперва отображают JavaScript-код совершающий особые действия. Например записывающий что-нибудь в cookies или выжидающий определённое количество времени. Если к такой странице обращается примитивный бот, не способный обработать JavaScript, то он не сможет уйти дальше страницы проверки и таким образом не будет допущен до целевого сайта. Selenium позволяет все необходимые действия совершать с помощью настоящего браузера, а значит и успешно обходить подобные проверки.

Selenium-режим включается параметром «--selenium=1» указываемом при запуске. В описании каждого модуля вы можете узнать работает ли он в данном режиме.

Также вы можете (это не обязательно) указать параметр "--browser-wait-re». В него помещается регулярное выражение для поиска признаков ожидания в исходном коде HTML страницы. Например, это может быть ожидание какого-то действия от пользователя (решение капчи) или простое ожидание по времени ("wait X secs, we check your browser"). WS будет ждать пока данное совпадение не пропадёт из кода страницы.

Содержимое этого параметра вы можете определить очень просто. Запросите любую страницу целевого сайта с помощью консольного curl, wget или другим примитивным способом (не браузером). В случае наличия защиты вы увидите страничку содержащую код проверки браузера. Возьмите из неё любую уникальную фразу.

Используя Selenium следует помнить что работа через браузер занимает значительно больше времени и ресурсов в отличие от простого сканирования стандартными средствами. Обычная работа по сырому HTTP(S) в 10 потоков вряд ли «съест» много ресурсов, однако 10 потоков Selenium могут потреблять несколько гигабайт оперативной памяти (каждый поток — не просто отдельное окно, а отдельный полноценный экземпляр браузера). По этой причине в WS на данный момент стандартное ограничение на максимальное кол-во потоков для Selenium — 5. Вы можете изменить эту цифру в config.ini в параметре «max_threads» раздела «[selenium]» .

В работе с Selenium используется браузер Firefox, путь к которому можно указать в config.ini (раздел «[selenium]», параметр «firefox_path»). По-умолчанию это «/usr/bin/firefox». В вашей ОС он может быть другим.

По умолчанию работа браузеров видна т.к. в config.ini параметр «virtual_display» имеет значение «0». Это позволяет следить за ходом сканирования и при необходимости останавливать и корректировать его. Если установить данный параметр в «1», то окна браузеров будут открываться в виртуальном дисплее и вам будут не видны. Это же решение позволяет запускать selenium-сканирования на VDS не имеющих графической оболочки. Однако помните о том что данный вид сканирования очень «капризный» и не до конца протестирован/отлажен. Лучше если он будет работать в видимом режиме и под вашим присмотром.

Неприятной особенностью работы с Selenium на данный момент является то, что загружая целевую страницу браузер обращается к массе других адресов содержащихся в ней (иконки, js-скрипты, шрифты и пр.). Иногда такие обращения виснут на стадии ожидания ответа или передачи данных. Пока что эта проблема частично решена тем что в создаваемых браузерах отключается загрузка CSS, картинок и Flash с помощью config.ini (смотрите раздел конфигурации). Тем не менее, проблема встречается. Для её решения в config.ini можно использовать параметр «timeout_page_load» в котором указывается максимальное время ожидания загрузки страницы. По умолчанию это 15 секунд. Однако если каждая страничка будет грузиться по 15 секунд (предположим что зависающее обращение есть на всех страницах сайта) то скорость сканирования значительно упадёт. В этом случае можно проблемный хост внести в /etc/hosts с IP 127.0.0.1. Если конечно он не является целевым и вы не используете прокси.

При работа с Selenium не работают ограничения по загружаемому содержимому — т. е. ограничения по объёму (config.ini max_size) и mime-типам.