CDP расширения
Введение
В Vision стандартный Chrome DevTools Protocol расширен собственными командами человекоподобного ввода и виртуальной мыши. Они помогают сделать автоматизацию менее заметной для антифрод-систем: вместо мгновенных «роботизированных» действий ввод текста и движения курсора выглядят естественно — так, как если бы их выполнял реальный пользователь.
Доступно два расширения:
- Human Type — человекоподобный ввод текста с естественными задержками между нажатиями.
- VirtualMouse — виртуальный курсор с плавной, естественной траекторией движения — как у реального пользователя.
Эти команды являются расширениями Vision и недоступны в обычном Chromium или Chrome.
CDP Extras доступны начиная с тарифа Base и выше.
Подключение
Команды отправляются в рамках обычной CDP-сессии к уже запущенному профилю — через любую библиотеку автоматизации, которая поддерживает Chrome DevTools Protocol (Playwright, Puppeteer и др.).
Подключаться можно только к профилям, запущенным через API. Адрес и порт для подключения возвращаются в ответе на запрос запуска профиля.
Подключение к браузеру
Как подключиться к запущенному профилю через Playwright, Puppeteer и другие библиотеки
Human Type
Команда Input.typeText печатает текст в текущий сфокусированный редактируемый элемент, имитируя ручной ввод: символы появляются по одному со случайной задержкой между нажатиями.
Параметры
Prop
Type
Пример
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.connectOverCDP('http://127.0.0.1:19397');
const context = browser.contexts()[0];
const page = await context.newPage();
const client = await context.newCDPSession(page);
await page.goto('https://example.com');
// Текст вводится в текущий сфокусированный редактируемый элемент
await client.send('Input.typeText', {
text: 'Введено с помощью Human Type',
minDelay: 55,
maxDelay: 130,
});
await browser.close();
})();import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp('http://127.0.0.1:19397')
context = browser.contexts[0]
page = await context.new_page()
client = await context.new_cdp_session(page)
await page.goto('https://example.com')
# Текст вводится в текущий сфокусированный редактируемый элемент
await client.send('Input.typeText', {
'text': 'Введено с помощью Human Type',
'minDelay': 55,
'maxDelay': 130,
})
await browser.close()
asyncio.get_event_loop().run_until_complete(main())VirtualMouse
VirtualMouse — это настоящий курсор внутри браузера, который движется так, будто им управляет живой человек: плавная траектория и естественные микроотклонения. Никаких мгновенных телепортов и идеально прямых линий, по которым антифрод-системы вычисляют автоматизацию.
Доступные команды:
VirtualMouse.create— создаёт виртуальный курсор.VirtualMouse.configure— меняет настройки движения для последующих команд.VirtualMouse.move— перемещает курсор в точкуx,y.VirtualMouse.click— перемещает курсор (если переданы координаты) и выполняет левый клик. Без координат используется текущая позиция курсора.VirtualMouse.destroy— удаляет виртуальный курсор.
Параметры движения
Передаются в VirtualMouse.create и VirtualMouse.configure.
Prop
Type
Параметры клика
Передаются в VirtualMouse.click.
Prop
Type
Пример
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.connectOverCDP('http://127.0.0.1:19397');
const context = browser.contexts()[0];
const page = await context.newPage();
const client = await context.newCDPSession(page);
await page.goto('https://example.com');
// Создаём виртуальный курсор
await client.send('VirtualMouse.create', {
speed: 1.2,
x: 100,
y: 100,
noiseScale: 1.0,
includeReaction: true,
seed: 12345,
});
try {
await client.send('VirtualMouse.move', { x: 500, y: 240 });
await client.send('VirtualMouse.click', { duration: 40 });
} finally {
// Удаляем курсор в любом случае
await client.send('VirtualMouse.destroy');
}
await browser.close();
})();import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp('http://127.0.0.1:19397')
context = browser.contexts[0]
page = await context.new_page()
client = await context.new_cdp_session(page)
await page.goto('https://example.com')
# Создаём виртуальный курсор
await client.send('VirtualMouse.create', {
'speed': 1.2,
'x': 100,
'y': 100,
'noiseScale': 1.0,
'includeReaction': True,
'seed': 12345,
})
try:
await client.send('VirtualMouse.move', {'x': 500, 'y': 240})
await client.send('VirtualMouse.click', {'duration': 40})
finally:
# Удаляем курсор в любом случае
await client.send('VirtualMouse.destroy')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())Готовые примеры
Полные рабочие примеры для JavaScript и Python собраны в отдельном репозитории.
browser-vision/cdp-extras
Примеры использования Human Type и VirtualMouse из собственного кода автоматизации