Selenium webdriver: Modifying navigator.webdriver flag to prevent selenium detection
Selenium webdriver: изменение navigator.флаг webdriver для предотвращения обнаружения selenium
Я пытаюсь автоматизировать очень простую задачу на веб-сайте с использованием selenium и chrome, но каким-то образом веб-сайт обнаруживает, когда chrome управляется selenium, и блокирует каждый запрос. Я подозреваю, что веб-сайт полагается на открытую переменную DOM, подобную этой https://javalang.ru/a/41904453/648236 для обнаружения браузера, управляемого selenium.
Мой вопрос в том, есть ли способ, которым я могу сделать navigator.флаг webdriver false? Я готов зайти так далеко, что попытаюсь перекомпилировать исходный код selenium после внесения изменений, но, похоже, я не могу найти источник информации Navigatorautomation где-либо в репозитории https://github.com/SeleniumHQ/selenium
Но это обновляет свойство только после начальной загрузки страницы. Я думаю, что сайт обнаруживает переменную до выполнения моего скрипта.
Переведено автоматически
Ответ 1
Сначала обновление 1
execute_cdp_cmd(): Теперь, благодаря доступности execute_cdp_cmd(cmd, cmd_args) command, вы можете легко выполнять Google-chrome-devtools с помощью Selenium. Используя эту функцию, вы можете легко изменить navigator.webdriver, чтобы предотвратить обнаружение Selenium.
Предотвращение обнаружения 2
Чтобы предотвратить обнаружение WebDriver, управляемого Selenium, нишевый подход будет включать в себя любой из перечисленных ниже шагов:
Изменение команды user-agent через execute_cdp_cmd() следующим образом:
#Setting up Chrome/83.0.4103.53 as useragent driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
Измените значение свойства для navigator для webdriver на undefined
Согласно проекту редактора W3C в текущей реализации строго указано:
webdriver-activeФлаг устанавливается на true, когда пользовательский агент находится под удаленным управлением, которое изначально установлено на false.
Далее,
Navigator includes NavigatorAutomationInformation;
Следует отметить, что:
NavigatorAutomationInformationИнтерфейс не должен быть доступен в WorkerNavigator.
NavigatorAutomationInformationИнтерфейс определяется как:
который возвращает, true если webdriver-active установлен флаг, значение false в противном случае.
Наконец, navigator.webdriver определяет стандартный способ для взаимодействующих пользовательских агентов информировать документ о том, что он контролируется WebDriver, так что во время автоматизации могут запускаться альтернативные пути кода.
Внимание: Изменение / настройка вышеупомянутых параметров может заблокировать навигацию и привести к обнаружению экземпляра WebDriver.
Обновление (6 ноября 2019)
В текущей реализации идеальным способом доступа к веб-странице без обнаружения было бы использовать ChromeOptions() класс для добавления пары аргументов в:
Исключить набор enable-automation переключателей
Отключить useAutomationExtension
с помощью экземпляра ChromeOptions следующим образом:
Не используйте команду cdp для изменения значения webdriver, поскольку это приведет к несоответствию, которое позже может быть использовано для обнаружения webdriver. Используйте приведенный ниже код, это удалит все следы webdriver.