Глоссарий
Chrome DevTools Protocol
Chrome DevTools Protocol это канал, которым программа управляет браузером Chromium и читает то, что он показывает.
Что несёт этот канал
Команда уходит и ответ приходит по одному соединению. Переходы, нажатия, ввод, печенье, снимки экрана и скрипт страницы едут одной дорогой.
- 1
Одно соединение на запущенный браузер
Браузер сам объявляет свой адрес, как только начал слушать, и управляющая сторона читает его оттуда.
- 2
Команды собраны по областям
Каждая область это одна часть браузера, и любая команда называет ту область, к которой относится.
- 3
Поток событий просят отдельно
События приходят только после того, как область включили, а включение меняет сам браузер.
Ваш браузер прямо сейчас
Значения прочитаны в том браузере, в котором вы это читаете. Признак автоматизации это первая строка почти любой проверки на робота.
Ваша машина прямо сейчас
- Признак автоматизации
- измеряем на вашей машине
- Строка браузера
- измеряем на вашей машине
- Платформа
- измеряем на вашей машине
Прочитано в вашем браузере и показано здесь. Никуда не отправляется.
Порт это самая дорогая часть
Открытый порт отладки не спрашивает пароля. Любая программа, запущенная на этой же машине под тем же пользователем, управляет через него браузером.
Адрес на всю программу достаёт до всего
Одна точка входа на всю программу означает, что управлять можно и окном менеджера, а не только профилем.
Он открывается только там, где нужен
Основной движок даёт каждому профилю свою точку входа, поэтому порт на всю программу остаётся закрытым.
Он живёт ровно столько, сколько окно
Точка входа исчезает вместе с профилем, и адрес, сохранённый с прошлого запуска, ведёт в никуда.
Заметная странице область остаётся выключенной
Включение области скриптов заставляет браузер поставить крючки, которые скрипт страницы умеет заметить. Несколько известных проверок на робота только их и ищут, а стоит это одной строки в теле страницы.
Эту область здесь не включают никогда. Две другие поднимаются только под ту работу, ради которой нужны, и следа в странице не оставляют.
Скрипт исполняется при выключенной области
Исполнение скрипта, переход и ввод работают, ничего не включая.
Готовность спрашивают руками
У страницы спрашивают её собственное состояние загрузки вместо подписки на поток событий жизни.
Гаснет только одна из двух
Область жизни страницы выключают, как только снятие кончилось. Область запросов поднимается с первым шагом ожидания и держится до закрытия профиля.
Признак автоматизации
Открытие порта отладки заставляет Chromium сообщать, что браузером управляют, и одно это значение кончает проверку раньше, чем дело дойдёт до отпечатка. Для продукта этого рода такая мелочь перечёркивает всю работу над машиной профиля.
Ключ запуска его гасит, а значение читается с настоящей страницы в настоящем движке, а не берётся на веру. Стенд запускает движок теми же доводами, какими его запускает сама программа.
Часто путают с этим
WebDriver
Другой протокол со своим сервером, и браузер, которым правят через него, говорит об этом тем же признаком.
Расширение
Расширение живёт внутри мира страницы и достаёт только до того, что браузер ему отдал.
Локальный интерфейс
Локальный интерфейс это дверь, открытая для ваших скриптов. Этот протокол это канал за дверью.
Чего это не делает
- Это никого не опознаёт. Канал доверяет всякому, кто до него дотянулся, поэтому адрес не выходит за пределы машины и принадлежит одному профилю.
- Это не прячет повадку скрипта. Задержки, дорога указателя и порядок действий читаются отдельно и выдают автоматизацию сами по себе.
- Это не даёт встроенному движку точку входа на каждый профиль. Там один адрес обслуживает всю программу, и ответ на запуск говорит об этом прямо.
- Это не переживает окно. Закройте профиль, и адреса нет, поэтому управляющая сторона берёт свежий при каждом запуске.
Проверить
За каждой строкой выше файл, который можно открыть, и стенд, который держит её честной.
- Сам клиент и область, которую не включают нигде
- 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
Вопросы
- Нужно ли что-то ставить, чтобы этим пользоваться?
- Нет. Браузер уже умеет говорить на нём, а точку входа открывает запуск профиля, и он же возвращает её адрес.
- Увидит ли сайт, что профилем управляют?
- Из самого канала нет, пока ни одна заметная область не включена и признак автоматизации погашен. То, что ваш скрипт делает мышкой, это отдельная примета.
- Порт открыт всё время?
- Нет. Он принадлежит окну профиля и существует ровно столько, сколько живёт это окно.
- Дотянется ли до него другая программа на моём компьютере?
- Дотянется всё, что запущено под вашим пользователем и достаёт до этого адреса. Поэтому наружу машины он не объявляется никогда.
- Кто пользуется им здесь?
- Сценарии, синхронизатор и ваши собственные скрипты через локальный интерфейс. Все трое идут через один клиент, поэтому правила выше держатся в одном месте.
Рядом с этим
Локальный интерфейс
Дверь, в которую стучатся ваши скрипты, и чем отвечает запуск.
Сборщик сценариев
Сценарии, которые ведут профиль по этому же каналу.
Разработчикам
Управление профилями из своего кода и то, что при этом остаётся ложью.
Build flags
Настройки, которые решают, что содержит движок за этим каналом.
Поведите профиль своим скриптом
Запустите профиль через локальный интерфейс, и он ответит адресом, который принадлежит только этому профилю.