Обход защиты от роботов на сайте

Предположим, что при загрузке страницы сайта вы столкнулись с тем, что грузится лишь короткий ответ, где написано что выполняется проверка браузера (или что-то подобное):

Действие Параметр Значение Результат
Загрузить страницу по ссылке Способ загрузки WinHTTP Исходный код веб-страницы (длиной 2024 символа)

URL https://www.pult.ru/main/akustika/
HTML: Поиск тегов Тип элемента title Текст (длиной 21 символ)
Тип результата / извлекаемый атрибут ConvertToText 1

Причина этого: сайт при помощи скриптов пытается проверить, какой браузер используется, или выводит видимую / невидимую капчу, — потому и пишет «Включите JavaScript для доступа».

Поскольку парсер по умолчанию не использует браузер для загрузки страниц (поскольку парсинг без браузера намного быстрее), эта проверка со стороны сайта не выполняется, и мы не можем загружать с него данные.

Можем ли мы парсить такие сайты без браузера?

В большинстве случаев — да, можем.
Для этого нужно один раз (перед началом парсинга) запустить браузер Chrome, чтобы проверка пользователя / браузера успешно завершилась, после чего мы считываем Cookie из браузера, и передаём их во всех дальшейших запросах к сайту.

Передача Cookies выполняется автоматически для способа загрузки WinHTTP (это способ по умолчанию в действии Загрузить страницу по ссылке), так что, один раз загрузив и применив Cookies, мы можем выполнять сколько угодно запросов объычным способом.

Создаём в парсере набор действий с названием Parser_Start, и пишем там что-то вроде этого:

Действие Параметр Значение
для чистоты эксперимента: чтобы очистить все ранее заданные заголовки запроса и куки
Создать новый экземпляр WinHTTPRequest Сброс Cookies и заголовков запроса да
позволяем сайту выполнить все необходмые проверки
Браузер: открыть страницу URL https://www.pult.ru/
Режим загрузки ActiveTab Reload
Режим ожидания
Параметр ожидания
если вы на этом сайте давно (или никогда) не были, то может вылезти капча, которую нужно пройти вручную
Проверка на выполнение условия Режим проверки не содержит
Значение для сравнения >Проверка безопасности</title>
Действие при выполнении условия Пропустить несколько действий
Параметр действия 2
Проверять другое значение нет
Другое проверяемое значение
тогда ждем, пока пользователь щелкнет мышом где нужно, и возвращаемся к загрузке страницы
INFO: Вывод сообщения (MsgBox) Текст сообщения Щелкните в квадратике, и потом нажмите ОК на этом сообщении
Заголовок сообщения Требуется пройти проверку в браузере
Тип сообщения + кнопки 1 = OK / отмена
Возвращать нажатую кнопку да
Проверка на выполнение условия Режим проверки равно
Значение для сравнения 1
Действие при выполнении условия Вернуться к действию
Параметр действия 2
Проверять другое значение нет
Другое проверяемое значение
если нажата кнопка Отмена в сообщении - останавливаем парсер (например, нам не удалось вручную пройти капчу)
Проверка на выполнение условия Режим проверки равно
Значение для сравнения 2
Действие при выполнении условия Остановить
Параметр действия -9
Проверять другое значение нет
Другое проверяемое значение
считываем все куки, + ещё 2 дополнительных (которые не считались вместе с другими, но их было видно в консоли браузера). Все считанные куки будут автоматически добавляться ко всем запросам (способом WinHTTP в действии Загрузить страницу по ссылке)
Браузер: выполнить команду Команда ApplyCookiesToWinHTTP
Параметр PHPSESSID|flocktory-uuid
считываем скриптом строку userAgent из браузера, - в данном случае значения Cookie привязаны к userAgent
Браузер: выполнить команду Команда ExecuteScript
Параметр return navigator.userAgent;
СОХРАНИТЬ значение в переменную Название переменной UserAgent
Область видимости parser
больше браузер нам не нужен: мы считали все необходимые данные для выполнения запросов
Браузер: закрыть
теперь ко всем запросам будет добавляться этот заголовок
Добавить заголовок запроса Заголовок user-agent
Значение %UserAgent%
Использовать для ВСЕХ запросов да

При тестировании этого списка команд, мы увидим всплывающее уведомление примерно такого вида:

После выполнения этого набора действий (он будет автоматически запускаться после старта парсера), результат загрузки страницы будет уже совсем другим:

Действие Параметр Значение Результат
Загрузить страницу по ссылке Способ загрузки WinHTTP Исходный код веб-страницы (длиной 328085 символов)

URL https://www.pult.ru/main/akustika/
HTML: Поиск тегов Тип элемента title Текст (длиной 123 символа)

Тип результата / извлекаемый атрибут ConvertToText 1