Перепробовал кучу разных вариантов, вот что из них может сработать для кого-то (не для меня):
1. Очень сомнительно, но некоторые люди пишут, что для них это работало:
Изменение название переменной документа js, используемой Selenium -
$cdc_. Для этого достаточно открыть файл chromedriver.exe в любом шестнадцатеричном редакторе (я использовал HxD) изменить её название на любое другое. Это не сработало для меня, но сам chromedriver работает нормально после этого. Так-же я пробовал изменить все переменные где есть слова
driver, но это была плохая идея - chromedriver перестал запускать. Без изменения исходников тут точно не обойтись, но я не уверен что это может сработать.
2. Это более действующий вариант, который даёт хоть какой-то результат. На
этой странице можно определить используется chromedriver, или нет и при запуске этой страницы через selenium действительно отображается, что используется webdriver. Добавление следующего куска кода помогло обойти эту идентификацию:
options.add_experimental_option("excludeSwitches", ['enable-automation'])
Но это всё-равно не помогло мне.
Так-же нашел очень сомнительное и вероятнее всего просто нерабочее решение:
Запуск js-кода, который меняет состояние переменных navigator, включая navigator.webdriver.
Так он запускается:
driver.execute_script("var s=window.document.createElement('script'); s.src='javascript.js';window.document.head.appendChild(s);")
Сам js-код// overwrite the 'languages' property to use a custom getter
const setProperty = () => {
Object.defineProperty(navigator, "languages", {
get: function() {
return ["en-US", "en", "es"];
}
});
// Overwrite the 'plugins' property to use a custom getter.
Object.defineProperty(navigator, 'plugins', {
get: () => [1, 2, 3, 4, 5],
});
// Pass the Webdriver test
Object.defineProperty(navigator, 'webdriver', {
get: () => false,
});
callback();
};
setProperty();
Ерунда в том, что в Chrome вообще отсутствует переменная
navigator.webdriver, в этом можно убедиться вводом
navigator в консоли браузера, её там нет. Зато эта переменная есть в Firefox, но этот код её не меняет, т.е. он просто ничего не делает, значение переменной Firefox
navigator.webdriver всегда равно
true при запуске через
selenium. В обычном (ручном) режиме она
false.
UPD. Не знаю, как проглядел, но в конечном итоге всё уперлось в проверку
reCAPTCHA v3. Эта проверка проходится практически всегда при следующих условиях:
1. Не используется User-Agent.
2. Не используется прокси.
3. Не отключаются уведомления.
4. Не блокируются запросы на разрешения.
4. Используется вот этот параметр:
options.add_experimental_option("excludeSwitches", ['enable-automation'])
Но при таких параметрах зарегистрировать более одного раза с одного IP не представляется возможным. Как я и указывал в своём вопросе - прокси использовал совершенно разные - от паблик до микро-серверов google cloud, так что дело не в "качестве" прокси а сугубо в факте его использования.