Комментарии 15
Несколько раз перечитал ключевые моменты, но так и не понял - все, проделанное в статье, можно было заменить просто селениумом с хром драйвером, который перед началом парсинга (или в случае истекания срока куки) проходит челлендж, получает все куки, отдает их парсеру, который ходит с ними и таким же юзерагентом, пока не получит не 200 код?
селениумом с хром драйвером
Это же чистосердечное признание бота.
Можно оргинальный хром(и почти любой хром based) например открывать. Я так пользовался через puppeteer, плюс есть плагины которые антидетект реализуют, для сервера(и по факту) получается обычный полноценный браузер.
Почему же? Вы о мелких грязных лайвхаках, вроде наличия системной переменной или вызова функции, которые может применить сайт?
Думаю, такие детские грабли чем-то вроде https://pypi.org/project/undetected-chromedriver/ должны лечиться в один клик
Существуют способы обнаружения автоматизации, которые связаны с протоколом, по которому идёт обмен данными между браузером и скриптом. Chrome, как правило, автоматизируется при помощи CDP. Через него-же работают все фичи, которыми можно пользоваться, когда вы открываете DevTools.
Cуществуют способы и антибот системы, которые умеют определять, что у вас открыта консоль. Многие автоматизированные системы типа puppeteer не умеют из коробки проходить этот тест (даже если включить stealth-plugin).
Пример теста: https://verz1lka.github.io/x/runtime.html (попробуйте страницу с открытой и закрытой devtools консолью)
Другая проблема таких плагинов - как правило, они почти никогда не могут нормально перекрывать проверки, которые делаются внутри айфреймов.
Может быть, если написать все асинхронно, то RPS будет значительно больше.
Но на уровне 1.2 RPS действительно можно использовать тот же Selenium и вариации на него, тоже такая мысль возникла, пока читал.
Так а какое значение имеет RPS? Скраппер ходит мимо селениума во много потоков, открывая прямые TCP соединения с сайтом, и делая запросы только по сути. Хоть на чистом C++ может быть написан.
Селениум приходит на помощь скрапперу, условно, 1 раз в 5 минут, чтобы новые куки получить правильные, и скраппер, подставив их в соответствующий хедер, продолжил работу
Если начать масштабировать такие решения, предположим, хотим собирать 1M страниц каждый день - это будет очень дорого.
Это к слову. Как бы ты не пытался защитится от парсинга своего продукта, вопрос только во времени когда кто то допытливый сможет раскрутить и разобраться. 100% защиты не бывает и не возможно придумать) Можно только усложнить и увеличить время для достижения этого.
Спасибо, очень ценная информация, тяжело что-то найти на эту тему. Нужно будет детальнее изучить
Оставлю ссылку на http://jsnice.org/ автоматом переименовывает все переменые и функции
Анализ системы защиты от ботов на примере letu.ru