Глоссарий
Chrome DevTools Protocol
Chrome DevTools Protocol это канал, которым программа управляет браузером Chromium и читает то, что он показывает.
Что несёт этот канал
Команда уходит и ответ приходит по одному соединению. Переходы, нажатия, ввод, куки, снимки экрана и скрипт страницы едут одной дорогой.
- 1
Одно соединение на запущенный браузер
Браузер сам объявляет свой адрес, как только начал слушать, и управляющая сторона читает его оттуда.
- 2
Команды собраны по областям
Каждая область это одна часть браузера, и любая команда называет ту область, к которой относится.
- 3
Поток событий просят отдельно
События приходят только после того, как область включили, а включение меняет сам браузер.
Ваш браузер прямо сейчас
Значения прочитаны в том браузере, в котором вы это читаете. Свойство navigator.webdriver почти любая проверка на робота читает первым.
Ваша машина прямо сейчас
- navigator.webdriver
- измеряем на вашей машине
- User agent
- измеряем на вашей машине
- Платформа
- измеряем на вашей машине
Прочитано в вашем браузере и показано здесь. Никуда не отправляется.
Порт это самая дорогая часть
Открытый порт отладки не спрашивает пароля. Любая программа, запущенная на этой же машине под тем же пользователем, управляет через него браузером.
Адрес на всю программу достаёт до всего
Одна точка входа на всю программу означает, что управлять можно и окном менеджера, а не только профилем.
Он открывается только там, где нужен
ARMANOS Browser даёт каждому профилю свою точку входа, поэтому порт на всю программу остаётся закрытым.
Он живёт ровно столько, сколько окно
Точка входа исчезает вместе с профилем, и адрес, сохранённый с прошлого запуска, ведёт в никуда.
Заметная странице область остаётся выключенной
Включение области скриптов заставляет браузер поставить крючки, которые скрипт страницы умеет заметить. Несколько известных проверок на робота только их и ищут, а стоит это одной строки в теле страницы.
Эту область здесь не включают никогда. Две другие поднимаются только под ту работу, ради которой нужны, и следа в странице не оставляют.
Скрипт исполняется при выключенной области
Исполнение скрипта, переход и ввод работают, ничего не включая.
Готовность спрашивают руками
У страницы спрашивают её собственное состояние загрузки вместо подписки на поток событий жизни.
Гаснет только одна из двух
Область жизни страницы выключают, как только снятие кончилось. Область запросов поднимается с первым шагом ожидания и держится до закрытия профиля.
Управление браузером остаётся невидимым
Открытие порта отладки заставляет Chromium сообщать, что браузером управляют, и одно это значение кончает проверку раньше, чем дело дойдёт до отпечатка. Для продукта этого рода такая мелочь перечёркивает всю работу над машиной профиля.
У профилей ARMANOS эта примета погашена, и увидеть это можно на живой странице в движке, а не поверить на слово. Движок для проверки запускается ровно так же, как его запускает программа.
Часто путают с этим
WebDriver
Другой протокол со своим сервером, и браузер, которым правят через него, объявляет об этом тем же navigator.webdriver.
Расширение
Расширение живёт внутри мира страницы и достаёт только до того, что браузер ему отдал.
Локальный API
Локальный API («Для программистов > Включить локальный API») это дверь, открытая для ваших скриптов. Этот протокол это канал за дверью.
Чего это не делает
- Это никого не опознаёт. Канал доверяет всякому, кто до него дотянулся, поэтому адрес не выходит за пределы машины и принадлежит одному профилю.
- Это не прячет повадку скрипта. Задержки, дорога указателя и порядок действий читаются отдельно и выдают автоматизацию сами по себе.
- Это не даёт встроенному движку точку входа на каждый профиль. Там один адрес обслуживает всю программу, и ответ на запуск говорит об этом прямо.
- Это не переживает окно. Закройте профиль, и адреса нет, поэтому управляющая сторона берёт свежий при каждом запуске.
Проверить
За каждой строкой выше файл, который можно открыть, и стенд, который держит её честной.
- Сам клиент и область, которую не включают нигде
- apps/desktop/src/lib/cdp.js
- Порт на всю программу открывается только для того движка, которому он нужен
- apps/desktop/test/cdp-port-only-when-needed.js
- Признак автоматизации читается с настоящей страницы в настоящем движке
- apps/desktop/test/webdriver-flag.js
- Где профиль объявляет адрес и где поднимают две области
- apps/desktop/src/lib/forkPage.js
Вопросы
- Нужно ли что-то ставить, чтобы этим пользоваться?
- Нет. Браузер уже умеет говорить на нём, а точку входа открывает запуск профиля, и он же возвращает её адрес.
- Увидит ли сайт, что профилем управляют?
- Из самого канала нет, пока ни одна заметная область не включена и navigator.webdriver остаётся ложным. То, что ваш скрипт делает мышкой, это отдельная примета.
- Порт открыт всё время?
- Нет. Он принадлежит окну профиля и существует ровно столько, сколько живёт это окно.
- Дотянется ли до него другая программа на моём компьютере?
- Дотянется всё, что запущено под вашим пользователем и достаёт до этого адреса. Поэтому наружу машины он не объявляется никогда.
- Кто пользуется им здесь?
- Сценарии, синхронизатор и ваши собственные скрипты через локальный API. Все трое идут через один клиент, поэтому правила выше держатся в одном месте.
Рядом с этим
Локальный API
Дверь, в которую стучатся ваши скрипты, и чем отвечает запуск.
Сборщик сценариев
Сценарии, которые ведут профиль по этому же каналу.
Разработчикам
Управление профилями из своего кода и то, что при этом остаётся ложью.
Build flags
Настройки, которые решают, что содержит движок за этим каналом.
Поведите профиль своим скриптом
Запустите профиль через локальный API, и он ответит адресом, который принадлежит только этому профилю.