Я понимаю, что протокол Chrome DevTools предоставляет Google Chrome DevTools через API для программного управления, а puppeteer предоставляет для этого реализацию Node.js. Однако, если я не ошибаюсь, puppeteer не позволяет нам делать все, которые может сделать протокол DevTools.
Если я хочу удаленно отлаживать свой браузер Android Chrome, как я могу сделать вручную, перейдя в раздел «Удаленные устройства» моего DevTools, есть ли способ сделать это в обход кукловода? Есть ли пакет, который позволяет нам получить доступ к большему количеству основных функций протокола DevTools?
Да, вы можете это сделать. puppeteer — это просто оболочка вокруг Протокол Chrome DevTools. Чтобы понять, как работает протокол, вы можете взглянуть на Основы протокола, где объясняются основы.
Для общения на этом более низком уровне вы также можете использовать puppeteer. Ознакомьтесь с документацией CDPSession
, которая раскрывает «низкоуровневую» часть API.
const client = await page.target().createCDPSession(); // creates a "low level" session
await client.send('COMMAND'); // sends the command to the browser
client.on('MESSAGE', () => { /* message from the browser received */ });
Если вы не хотите использовать puppeteer, есть несколько других библиотек. Наиболее часто используемый для Node.js — хром-удаленный-интерфейс, более низкоуровневый, чем puppeteer. Согласно к документам:
chrome-remote-interface [...] is a general purpose 1:1 Node.js binding for the Chrome Debugging Protocol. Use it if you need all the power of the raw protocol, e.g., to implement your own high-level API.
Есть также несколько других библиотек (также для других языков). Вы можете найти полный список здесь.
Полный список вы найдете в файле Средство просмотра протокола Chrome DevTools. В качестве примера вы можете найти Animation.enable
здесь.
Я попытался найти решение для этого вручную. Я запустил Chrome в автономном режиме и начал сеанс отладки на локальном хосте: 9222. Хотя я мог видеть события на других вкладках devtools, таких как сеть, память, аудит и т. д., я не видел никаких событий для вкладки «Удаленные устройства». Дополнительная отладка показала ошибку ниже. Uncaught TypeError: Невозможно установить свойство «discoverUsbDevices» неопределенного в HTMLInputElement.eval. Когда я установил флажок «Обнаружить удаленные устройства»,
Это похоже на то, что я могу использовать. Спасибо! Не могли бы вы помочь мне со списком параметров, которые client.send('COMMAND') примет? Я смог найти только пример в репозитории github, т.е. await session.send('Animation.enable');