Как избежать обнаружения Selenium: Проверенные методы

Selenium — мощный инструмент для автоматизированного тестирования, который также широко используется для скрапинга и извлечения данных, поскольку он может обрабатывать рендеринг JavaScript, запросы Ajax или сложные взаимодействия пользователей. Однако иногда вы можете столкнуться с ситуациями, когда Selenium обнаруживается и блокируется целевым сайтом. Но не беспокойтесь — существуют способы обхода этих методов обнаружения. В этом руководстве мы объясним, как сайты обнаруживают Selenium, и предложим практические советы, которые помогут вам сохранить анонимность ваших скриптов.

 

Как сайты обнаруживают Selenium

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

Обнаружение через атрибут window.navigator.webdriver

Атрибут window.navigator.webdriver встраивается инструментами автоматизации браузеров, такими как Selenium WebDriver, в объект navigator глобального объекта window в браузере. Он может принимать три состояния:

  • True означает, что браузер в данный момент находится под управлением инструмента автоматизации.
  • False указывает, что браузер работает самостоятельно, без автоматизации.
  • Undefined означает, что нет четких указаний на использование инструментов автоматизации.

Когда Selenium WebDriver запускает сессию браузера, он обычно устанавливает этот атрибут в значение true. Это позволяет сайтам идентифицировать автоматизированные посещения через JavaScript. В обычных условиях, во время человеческого браузинга, этот атрибут будет false или undefined. Однако, если Selenium используется без изменения атрибута window.navigator.webdriver, сайт считывает его как true. Если сайт обнаруживает автоматизированный визит, он может инициировать определенные защитные действия, такие как отображение CAPTCHA, ограничение доступа к страницам, регистрация инцидентов или выдача предупреждений.

Результаты распознавания отпечатков пальцев и мониторинга распознавания роботов

 

Обнаружение Chrome DevTools Protocol (CDP)

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

Сайты могут обнаруживать использование CDP, отслеживая команды, которые необычны или обычно не генерируются регулярными пользователями. Это может включать необычные изменения в модели объекта документа (DOM) или специфические комбинации вызовов API, которые редко делают обычные пользователи.

Кроме того, механизмы обнаружения могут включать мониторинг сетевой активности на портах отладки, таких как порт 9222, который обычно используется для удаленной отладки, если он включен. Они также могут обнаруживать такие модели, как пакетные операции с формами, которые обычно указывают на автоматизированные скрипты, а не на взаимодействия человека.

Обнаружение Chrome DevTools Protocol

 

Анализ строк User-Agent

Строка User-Agent сообщает сайту о типе устройства и браузера, который к нему обращается. Автоматизированные скрипты иногда используют стандартную или необычную строку User-Agent, которая может быть явным признаком автоматизации, если строка включает термины вроде "Selenium" или необычные версии браузера. Изменение строки User-Agent для имитации популярного браузера может помочь избежать такого типа обнаружения.

 

Время загрузки страницы и шаблоны взаимодействия (анализ поведения пользователя)

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

  • Прокрутка и клики: Боты могут прокручивать страницы плавно и равномерно, в отличие от неровных шаблонов поведения человеческих пользователей. Автоматизированные клики часто происходят с постоянными интервалами и точными позициями на экране, в отличие от более переменного времени и точности кликов человека.
  • Время пребывания на странице: Скрипты обычно проводят на страницах одинаковое или минимальное время, в отличие от людей, которые варьируют в зависимости от интереса.
  • Время запросов: Боты могут работать в нечасы, например, поздно вечером или рано утром.
  • Интервалы запросов: Автоматизированные скрипты могут делать запросы с регулярными, предсказуемыми интервалами, в отличие от спорадических шаблонов деятельности человека. Особенно если они используют высокие темпы запросов с одной и той же строкой User-Agent, это легко будет обнаружено сайтами.

 

Обнаружение отпечатка браузера

Отпечаток браузера — это уникальная идентификация пользователя, создаваемая сайтами. Они создают уникальный профиль браузера, собирая детали, такие как версия браузера, разрешение экрана, шрифты и плагины. Этот уникальный профиль действует как онлайн-отпечаток, поэтому его также называют отпечатком браузера. Автоматизированные скрипты часто не имеют персонализированной конфигурации браузера, что делает их легко обнаруживаемыми, поскольку они соответствуют типичным шаблонам автоматизированных инструментов или веб-сканеров.

 

Как исправить, если Selenium обнаружен

Хотя веб-сайты всё чаще внедряют строгие меры против скрапинга, существуют способы справиться с этим. Но, пожалуйста, будьте осторожны, чтобы не нарушать закон или не вызвать чрезмерную нагрузку на сервер веб-сайта.

Используйте функцию обнаружения ботов BrowserScan

Если вы обнаружите, что ваши скрипты Selenium распознаются, функция обнаружения ботов BrowserScan может помочь. Она в первую очередь сосредоточена на этих четырёх ключевых областях, которые охватывают большинство параметров или уязвимостей, которые могут быть обнаружены веб-сайтом:

WebDriver: Проверьте ваш браузер на наличие признаков управления через WebDriver.

User-Agent: Проверьте, выглядит ли ваша строка User-Agent как у реального пользователя, или выдаёт использование скрипта.

CDP (Протокол инструментов разработчика Chrome): Точно обнаруживайте использование разработчиками для симуляции/управления браузером.

Объект Navigator: Проверяет Navigator на наличие признаков подделки, идентифицируя несоответствия, отклоняющиеся от нормальных данных пользователя.

Перед запуском ваших скриптов и в рамках регулярных обновлений рекомендуется тестировать их с помощью BrowserScan. Это позволит вам настроить параметры, сделать ваши скрипты более скрытными, уменьшить риск обнаружения и обеспечить бесперебойную работу ваших автоматизированных задач.

 

Изменение свойств WebDriver

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

Начните с уровня конфигурации, где вы можете симулировать черты типичного пользователя. Ниже приведен список настраиваемых свойств WebDriver, которые помогут вам снизить риск обнаружения, улучшив при этом производительность ваших скриптов.

1). Отключение флага window.navigator.webdriver

Вы можете настроить ваш браузер так, чтобы он скрывал свой автоматизированный статус от веб-сайтов. Добавьте флаг --disable-blink-features=AutomationControlled при запуске вашего браузера, это присвоит свойству window.navigator.webdriver значение false.

2). Использование режима без головы с параметрами скрытности

Запуск вашего браузера в режиме без головы означает, что браузер работает без графического пользовательского интерфейса, фактически работая в фоновом режиме. Этот режим труднее обнаружить веб-сайтам, поскольку он функционирует без полного интерфейса браузера, который обычно включает элементы, по которым веб-сайты могут идентифицировать автоматизированные инструменты.

Вы можете активировать его, добавив параметр --headless. Кроме того, вот некоторые параметры, которые могут усилить скрытность вашего браузера в режиме без головы, их можно использовать по мере необходимости:

  • --incognito: Этот флаг запускает браузер в режиме инкогнито, который предотвращает сохранение браузером любых файлов cookie, кэша или истории просмотров.
  • --disable-gpu: Хотя ускорение работы GPU может улучшить производительность рендеринга в полнофункциональном браузере, в режиме без головы это часто не нужно. Отключение аппаратного ускорения GPU может уменьшить след браузера и освободить ресурсы для оптимизации выполнения скриптов.
  • --no-sandbox: Эта функция особенно удобна, когда вы запускаете ваш браузер в ограниченном пространстве, например, в контейнере или ограниченной среде. Она отключает песочницу Chrome, специальную зону, где браузер находится в безопасности. Это помогает браузеру обходить проверки безопасности операционной системы, держит процессы браузера отдельно и снижает вероятность ошибок или сбоев, вызванных песочницей.

3). Установка пользовательской строки User-Agent

Вы можете использовать пользовательскую строку User-Agent, чтобы имитировать популярную версию браузера, что заставит ваш браузер, управляемый Selenium, выглядеть как браузер обычного пользователя. Изменение строки User-Agent может заставить ваш браузер выглядеть как другое устройство, что полезно для слияния с обычным трафиком. Вот пример кода, содержащий все вышеупомянутые настройки:

[Пример кода]

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# класс Options используется для настройки параметров запуска браузера Chrome.

options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
# отключите флаг window.navigator.webdriver

options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--incognito")

user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
options.add_argument(f'user-agent={user_agent}')
# определяет строку агента пользователя и передает ее в Chrome в качестве параметра запуска

driver = webdriver.Chrome(options=options)
# запустить Chrome, используя все настройки, которые были заданы ранее.

 

агрузка расширений

Расширения могут изменять поведение вашего браузера или управлять задачами, такими как блокировка рекламы, что также может помочь имитировать типичную среду пользователя.
[Пример кода]

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_extension('path/to/extension.crx')
# загрузите расширение Chrome с указанного пути

driver = webdriver.Chrome(options=options)

 

Использование прокси-IP

Использование прокси может скрыть ваш IP-адрес, что усложнит отслеживание и блокирование ваших автоматизированных скриптов. Это позволяет переключиться на другой IP-адрес, если текущий заблокирован целевым веб-сайтом.
Далее мы покажем вам пример кода, который запускает браузер Chrome, при этом все запросы HTTP и HTTPS направляются через указанный прокси-сервер.

[Пример кода]

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy_ip = '192.168.1.1:8080'  
# заменить на действительный IP прокси

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = proxy_ip
proxy.ssl_proxy = proxy_ip
# установите тип прокси вручную
# установите HTTP прокси и HTTPS прокси в proxy_ip, как указано выше

capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)
#CHROME — словарь, который содержит возможности по умолчанию, необходимые для запуска браузера CHROME

driver = webdriver.Chrome(desired_capabilities=capabilities)

 

Имитация поведения пользователя

Для имитации поведения человека в ботах обычной практикой является эмуляция естественных взаимодействий с мышью и клавиатурой, а также изменение тайминга этих взаимодействий.
В следующих разделах мы обсудим методы достижения этого в двух различных аспектах:

Имитация операций с мышью и клавиатурой

Многие разработчики могут использовать ActionChains для действий пользователя, таких как перемещение мыши и ввод текста. Однако у его метода send_keys() есть ограничения, когда дело касается действий, требующих ввода с клавиатуры.
В некоторых случаях метод send_keys() класса ActionChains может не вызвать события JavaScript или может вызвать их таким образом, который отличается от фактического ввода пользователя, что может легко привести к тому, что действие будет идентифицировано как скрипт бота.
Если ваш целевой веб-сайт включает много взаимодействий с JavaScript, вы можете использовать интерфейс IJavaScriptExecutor для решения этой проблемы в соответствии с вашими конкретными потребностями.

Рандомизация действий

Изменение времени, которое ваш скрипт проводит на страницах или взаимодействует с элементами, также может помочь избежать обнаружения. Следующий код содержит простую задержку, которая вносит случайность в поведение скрипта, делая его менее предсказуемым и более похожим на поведение человека.
Для дальнейших требований вы можете установить различные временные интервалы для каждого действия, например, 5 секунд после завершения одного визита перед следующим, 3 секунды после каждого действия клика и так далее.
[Пример кода]

import time
import random

time.sleep(random.randint(5, 10)) 
# Случайная задержка между 5 и 10 секундами

 

Использование библиотеки Undetectable Chromedriver

Undetectable Chromedriver  — это библиотека Python, которая инкапсулирует Selenium ChromeDriver, специально разработанная для имитации поведения браузера реального пользователя в автоматизированных скриптах, снижая риск обнаружения автоматизированных инструментов.
Она без проблем интегрируется с API WebDriver Selenium, предлагая комплексные функциональные возможности для уклонения от распространенных методов автоматического обнаружения.
[Пример кода]

import undetected_chromedriver.v2 as uc

driver = uc.Chrome()
driver.get('https://www.example.com')
# заменить на действительный URL

 

Использование параметра excludeSwitches

В этом примере мы используем простой фрагмент кода, чтобы проиллюстрировать использование метода add_experimental_option WebDriver Selenium. Этот метод позволяет пользователям устанавливать экспериментальные опции браузера, предоставляя пары ключ-значение.
Опция excludeSwitches указывает список переключателей, которые следует исключить при запуске браузера. Параметр enable-automation, включенный в этот список, предотвращает использование браузером функций управления автоматизацией, заставляя поведение браузера имитировать поведение типичного пользователя и таким образом уклоняться от базовых механизмов обнаружения ботов, анализирующих поведение пользователя.

[Пример кода]

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
# исключить параметр enable- automationparameters
driver = webdriver.Chrome(options=options)
driver.get('https://www.example.com')
# заменить на действительный URL

 

Почему мой веб-сканер Selenium легко обнаруживается?

Частые запросы и повторяющиеся шаблоны

Одна из общих причин, по которой ваш бот Selenium может быть обнаружен, заключается в частоте запросов. Если ваш скрипт отправляет запросы слишком быстро или постоянно обращается к одной и той же странице, это вызывает подозрения. Такое поведение не соответствует тому, как люди пользуются интернетом. К тому же, если ваш скрипт собирает данные круглосуточно, его также распознают как бота. Чтобы исправить это, попробуйте рассредоточить запросы, изменять посещаемые страницы и настроить скрипт на работу в обычное время.

Сканирование только исходного кода

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

 

Постоянная конфигурация браузера и операционной системы

Использование одной и той же конфигурации браузера для всех ваших задач по сканированию может сделать вашего бота легко узнаваемым. Веб-сайты могут обнаруживать шаблоны в отпечатках браузера, которые включают детали, такие как версия вашего браузера, операционная система и даже разрешение экрана. Чтобы избежать обнаружения, рассмотрите возможность использования разных конфигураций браузеров.

 

Заблокированные IP-адреса

Наконец, если вы используете один и тот же IP-адрес для нескольких сессий или слишком много запросов, веб-сайты могут его заблокировать. Это обычный метод, который сайты используют для ограничения деятельности по сбору данных. Использование прокси-IP может помочь вам избежать этой проблемы, позволяя вам менять ваше кажущееся местоположение и идентичность.

 

Предыдущий
Почему мой интернет такой медленный и как это исправить
Следующий
Как проверить скорость интернета на ПК и мобильных устройствах
Последнее изменение: 2024-08-20Powered by