Selenium webdriver: изменение флага navigator.webdriver для предотвращения обнаружения селена - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь автоматизировать очень простую задачу на веб-сайте, используя селен и хром, но каким-то образом веб-сайт определяет, когда хром управляется селеном, и блокирует каждый запрос. Я подозреваю, что веб-сайт использует открытую переменную DOM, такую ​​как эта https://stackoverflow.com/a/41904453/648236, для обнаружения браузера, управляемого селеном.

У меня вопрос, есть ли способ сделать флаг navigator.webdriver ложным? Я готов пойти так далеко, чтобы попытаться перекомпилировать источник селена после внесения изменений, но я не могу найти источник NavigatorAutomationInformation где-либо в хранилище https://github.com/SeleniumHQ/selenium

Любая помощь очень ценится

P.S .: Я также попробовал следующее из https://w3c.github.io/webdriver/#interface

Object.defineProperty(navigator, 'webdriver', {
    get: () => false,
  });

Но оно обновляет свойство только после начальной загрузки страницы. Я думаю, что сайт определяет переменную до того, как мой скрипт будет выполнен.

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Вы видели это правильно. Ответ, на который вы ссылались, указывает на состояние 2017 редактора W3C Editor *, которое развивалось в последние два года. Текущая реализация строго говорит о том, что:

Флаг webdriver-active установлен на true, когда пользовательский агент находится под дистанционным управлением , который изначально установлен на false.

Далее

Navigator includes NavigatorAutomationInformation;

Следует отметить, что:

Интерфейс NavigatorAutomationInformation не должен быть выставлен на WorkerNavigator .

Интерфейс NavigatorAutomationInformation определяется как:

interface mixin NavigatorAutomationInformation {
    readonly attribute boolean webdriver;
};

, который возвращает true , если webdriver-active установлен флаг , иначе false.

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

Изменение любого из этих параметров может заблокировать навигацию и получить обнаруженный экземпляр WebDriver .

0 голосов
/ 17 июня 2019

До (в окне консоли браузера):

> navigator.webdriver
true

Изменение (в селене):

// C#
var options = new ChromeOptions();
options.AddExcludedArguments(new List<string>() { "enable-automation" });

// Python
options.add_experimental_option("excludeSwitches", ['enable-automation'])

После (в окне консоли браузера):

> navigator.webdriver
undefined
0 голосов
/ 29 октября 2018

Попробуйте сменить пользовательский агент

Примерно так:

ChromeOptions options = new ChromeOptions();
options.addArguments("user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36");

ChromeDriver driver = new ChromeDriver(options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...