Вопрос: Какие могут быть способы определения автоматизации Selenium?

Лучший ответ:
Перепробовал кучу разных вариантов, вот что из них может сработать для кого-то (не для меня):
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, так что дело не в "качестве" прокси а сугубо в факте его использования.

Худший ответ:
подпишусь
не подскажут    - сейчас это коммерческая инфа
ну из того что можно рассказать - поменьше headless ))
но  - все гораздо сложнее