Объединение ввода CDP для согласованного hover-взаимодействия
Настройте ограниченную пакетную обработку движений мыши hover на уровне BrowserContext, сохранив обычные пути кликов, перетаскивания, колеса, клавиатуры, touch и пера.
Нужна структурированная документация по теме Начало работы?
Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.
Клиенты CDP обычно отправляют по одной команде движения мыши. Клиент отправляет точку, ждёт завершения, затем отправляет следующую. Это удобный для контроля порядок, но быстрое автоматическое наведение может попадать в очередь событий браузера иначе, чем поток нативного движения. Страница может видеть различия во времени и доставке событий.
BotBrowser предлагает настройку на уровне контекста для сценариев, которым нужен более согласованный путь hover: --bot-cdp-coalesce. По умолчанию она выключена. При включении для BrowserContext BotBrowser принимает короткую последовательность обычных движений мыши без нажатой кнопки, сохраняет порядок и передаёт их небольшим последовательным пакетом. Итоговые события страницы и нативное объединение событий остаются решением движка браузера.
Начните со значения по умолчанию
Большинству сценариев автоматизации специальная настройка ввода не нужна. Оставьте её выключенной для кликов, форм, клавиатуры, прокрутки, перетаскивания, touch-жестов и пера. Значение по умолчанию сохраняет обычное завершение CDP и не меняет уже подходящий рабочий процесс.
Включайте настройку только для контекста, который часто отправляет движения hover мыши через CDP и должен позволить браузеру принять эти точки с небольшим перекрытием. Подходящие примеры: проверка tooltip, меню, открывающееся при приближении указателя, hover-карточка или чувствительный к позиции указателя интерфейс рабочего стола. Настройка принадлежит контексту, поэтому соседний контекст того же браузера может остаться в режиме по умолчанию.
Она не рандомизирует траекторию и не создаёт точки. Координаты и порядок по-прежнему выбирает клиент. BotBrowser контролирует только передачу принятых движений в коротком окне. Последняя точка остаётся финальной позицией, видимой странице.
Настройте BrowserContext
Укажите --bot-cdp-coalesce в доступной вашему запускателю BotBrowser конфигурации контекста до создания первой страницы или worker. Сохраняйте значение вместе с версиями браузера, profile и пакета автоматизации, чтобы повторить ту же политику при проверке.
Флаг без значения включает поведение, как и --bot-cdp-coalesce=true. Используйте --bot-cdp-coalesce=false, если шаблон развёртывания может добавить флаг, но конкретному контексту нужно значение по умолчанию. Считайте его частью конфигурации идентичности контекста и не планируйте менять его после начала работы страниц.
Если процесс создаёт несколько контекстов, задайте значение каждому. Включённый контекст не включает настройку для соседей, а новый контекст получает собственный выбор. Это позволяет сравнивать один сценарий с настройкой и без неё без дополнительных процессов браузера.
Сделайте настройку видимой рядом с profile и объявлением контекста, а состояние запишите в метаданные запуска. Скрипты страницы не могут управлять моментом завершения команды CDP или способом попадания события в очередь браузера, поэтому они не заменяют этот флаг.
Какие движения объединяются
В пакет попадает только обычное движение мыши hover без кнопки. Указатель не удерживает кнопку, не находится в относительном режиме, а событие является обычным движением. Сюда входят приближение к цели, просмотр состояния hover и перемещение по интерфейсу рабочего стола.
Вне пакета остаются нажатие и отпускание кнопок, движение активного перетаскивания, колесо, клавиатура, текстовый ввод, touch, перо и относительное движение мыши. Эти границы сохраняют смысл дискретных действий и других устройств. Клик сохраняет обычное состояние кнопки и завершение. Перетаскивание сохраняет порядок переходов. Колесо сохраняет свои дельты и время.
Модификаторы и состояние кнопок также важны. Движение при удерживаемой кнопке относится к перетаскиванию или другому действию указателя и идёт обычным путём. Пакет hover не пересекает границу между наведением на элемент и действием над ним.
Доставка пакета и события
Контекст принимает короткую последовательность подходящих движений и передаёт точки в исходном порядке. Пакет ограничен, поэтому зависшая страница или необычно длинный поток не создают бесконечную очередь. Он также живёт недолго и не превращается в общий буфер ввода.
У каждой команды CDP остаётся один результат завершения. Принятая команда hover может завершиться после принятия контекстом к передаче, а страница всё равно получает движение через путь ввода браузера. Другие типы ввода используют обычное подтверждение. Если через тот же путь должен пройти другой ввод, ожидающие движения hover сначала завершаются, чтобы сохранить видимый порядок.
Движок браузера решает, как точки становятся событиями страницы. При объединении близких движений он может показать главное событие и дочерние coalesced-события. BotBrowser не создаёт дочерние события, не переписывает временные метки и не заменяет финальную координату. Контекст лишь добавляет перекрытие, которого не дают строго последовательные вызовы CDP.
Точное число событий меняется из-за планирования браузера, работы страницы, нагрузки хоста и потока клиента. Не проверяйте фиксированное число. Проверяйте видимый результат, порядок действий, завершение команд и финальную позицию.
Отделяйте движение от действия
Используйте шаг hover, чтобы достичь элемента, затем обычный клик, чтобы его активировать. Не полагайтесь на объединение hover для передачи перехода кнопки. В перетаскивании оставляйте всю последовательность на обычном пути и проверяйте результат отдельно.
Так проще читать проблемы. Если tooltip не появился, проверьте траекторию, геометрию цели и состояние страницы. Если клик не сработал, проверьте фокус и последовательность. Если перетаскивание не завершилось, проверьте источник, цель и принятие приложением. Одна настройка не должна объяснять все проблемы указателя.
Изоляция и жизненный цикл
Флаг принадлежит BrowserContext. Контекст A может быть включён, а контекст B выключен даже в одном процессе. Настройка не переходит в другой target, страницу, worker или новый контекст.
Закрывайте контекст после работы. Если страница или target заменены во время движения, старое движение не должно продолжаться в новую цель. Начинайте новый сценарий с новым состоянием страницы. При навигации дождитесь готовности нового документа и только затем выполняйте движение его интерфейса.
При пересоздании контекста применяйте настройку снова. Шаблон процесса упрощает повторение, но решение остаётся выбором каждого контекста. Это важно, когда один процесс обслуживает разные аккаунты, tenants или авторизованные тестовые сессии.
Практическая проверка
Используйте контролируемую страницу или одобренный тестовый маршрут с tooltip, меню hover или hover-карточкой. При достижении цели он должен показать видимое изменение.
Запустите один сценарий дважды: создайте контекст без опции, пройдите ту же траекторию тем же клиентом и координатами, запишите состояние hover и финальную позицию. Затем создайте отдельный контекст с опцией и повторите путь. Сохраняйте неизменными версию браузера, profile, viewport, состояние страницы, пакет клиента и список координат. Меняйте одну переменную за раз.
В производственном сценарии после появления hover добавьте клик и проверьте новое состояние страницы. Добавьте также поле формы или обычную кнопку, не зависящую от hover. Проверки перетаскивания, колеса, touch или пера добавляйте только для сценариев, где они действительно используются.
Успешный результат означает, что состояние hover достижимо, порядок верен, у каждой команды есть результат и финальная координата не потеряна. Это не означает одинаковый список объединённых событий или одинаковое число событий страницы в каждом запуске.
Совместимость и устранение проблем
Опция влияет на движения hover мыши, доставленные через CDP. Она не меняет идентичность браузера, сеть, cookies, хранилище, разрешения, viewport или данные profile. Мобильные сценарии проверяйте с touch и мобильным viewport. Интерфейсы пера и относительного движения сохраняют обычный ввод.
Если эффекта не видно, убедитесь, что контекст получил флаг до первой страницы, движение является обычным hover мыши, а страница действительно использует это состояние. Если число событий меняется между запусками, сравнивайте состояние hover, порядок, завершения и финальную координату. Если контексты различаются, проверьте явное значение, profile, версию, viewport, состояние страницы и список координат.
Завершение команды CDP и видимая готовность приложения являются разными условиями. Ожидайте сигнал страницы, который нужен сценарию. --bot-cdp-coalesce даёт ясный выбор для одной узкой категории взаимодействия: по умолчанию выключен, а для плотного движения hover может включаться в конкретном контексте; остальные типы ввода сохраняют обычные пути.
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.