Какой самый надежный способ программного управления экземпляром Chromium? - PullRequest
0 голосов
/ 20 сентября 2019

Я исследую надежные способы программного управления экземплярами Chrome / Chromium, чтобы использовать его возможности рендеринга веб-страниц в приложении Node.js / C # / Java.Короче говоря, я хочу сделать следующее:

  • Открыть / закрыть окно браузера.
  • Свернуть, развернуть окно браузера.
  • Перейти к определенномуURL.
  • Установка файлов cookie.

Чтобы было понятнее: мне нужен браузер с заголовками для отображения веб-страниц для конечных пользователей.Это может быть либо встроено в мое приложение, либо автономный браузер (например, отдельно поставляемый экземпляр Chromium).

Мне не удалось найти информацию о каких-либо общедоступных API в Chrome / Chromium, которые я могу использовать изсреда Node.js / C # / Java.Доступные для Chrome Extensions не применимы к моему проекту, так как я хочу управлять браузером извне, как, например, Selenium WebDriver.До сих пор я нашел следующие способы управления браузером так, как мне нужно:

  1. Для использования API Puppeteer / WebDriver.
  2. Использование библиотеки NodeJS chrome-remote-interface.
  3. Полагайтесь на возможности Chrome Embedded Framework.
  4. Полагайтесь на возможности Electron.js.
  5. Создайте свою собственную библиотеку, которая каким-то образом включает модули Chromium в качестве зависимостей (аналогично тому, что, например, реализовала команда Electron).).

Первые два варианта схожи с точки зрения всех упомянутых библиотек, которые в конечном итоге используют протокол Chrome Devtools.Риск того, что CDP будет удален / объявлен устаревшим, довольно существенен для нашего проекта.Другая проблема заключается в том, что целью CDP является отладка и автоматизация тестирования, а не разработка приложений.Более того, наличие открытого порта отладки в Chrome, открытого на компьютере пользователя, кажется уязвимым.

Пути CEF и Electron меня беспокоят из-за зависимости от частоты встроенных обновлений Chromium.Несмотря на то, что команда Electron стремится обновляться с каждым другим выпуском Chromium, это все же может быть проблемой безопасности из-за невозможности обновить версию Chromium сразу после выхода новой версии, например, с патчем безопасности.Более того, в случае, когда мне нужен реальный браузер (и это так), у меня его не будет сразу, и мне придется самому реализовывать такие функции браузера, как кнопки, адресная строка вкладок и т. Д.

Вариант № 5 представляется чрезвычайно сложным в реализации, так как, по-видимому, требует компетенции команды по внутренним компонентам Chromium, разработке C ++ и инструментам сборки C ++.

Что-то я пропустил в списке параметров?Что-то я пропустил в своих предположениях?Любые советы, мысли, предложения будут с благодарностью!

1 Ответ

0 голосов
/ 20 сентября 2019

Некоторые из ваших вариантов касаются управления браузером (# 1, # 2), в то время как другие касаются встраивания браузера (# 3, # 4).Это два разных варианта использования, и то, что вам нужно, зависит от вашей цели.

Управление браузером

Если вы хотите управлять браузером для выполнения задач, возможно, даже в фоновом режиме безконечный пользователь заметил, вам следует выбрать вариант 1 (кукловод) или 2 (интерфейс chrome-remote).

Я рекомендую использовать puppeteer , поскольку это библиотека, разработанная Google Chromeразработчики, и он поставляется со многими функциями для вашего случая использования (открытие окон браузера, навигация, настройка файлов cookie).

Я не вижу причин для беспокойства по поводу того, что Chrome DevTools Protocol может быть в любой момент отмененскоро.Chrome DevTools полностью полагаются на этот протокол.Кроме того, Firefox (средство отслеживания ошибок Mozilla: # 1316741 , # 1523097 ) и Edge уже частично поддерживают протокол, что делает его еще более маловероятным в случае отказа от него.будущее.( дополнительная информация )

Встраивание браузера

Если вам нужно встроить браузер, то есть вы пытаетесь показать браузер внутри приложения, вам следует сосредоточиться наварианты 3 (Chrome Embedded Framework) или 4 (Electron).

Chrome Embedded Framework - это более низкоуровневый подход, предусматривающий использование отдельного браузера в вашем приложении.Но я не могу здесь вдаваться в подробности, так как я никогда не использовал это сам.

Электрон с другой стороны - это браузер, то есть все приложение разработанокак веб-приложение.Вы можете встроить другое окно браузера ( webview ) в свой браузер, которым вы можете управлять (по аналогии с тем, что умеет кукловод).

Непосредственно с помощью кода Chromium (опция 5)

Хотя проект Chromium разделен на несколько компонентов, похоже, вам нужен полноценный браузер.Однажды я сам скомпилировал исходный код Chromium, и это занимает буквально часы.Имейте в виду, что он состоит из примерно 35 миллионов строк кода ( source ).Даже если вы выясните, какие части кода использовать, более реалистично, что некоторые низкоуровневые части кода изменяют и нарушают вашу реализацию, чем отказ от DevTools Protocol.Итак, я определенно рекомендую не следовать этой идее.

Альтернативы

В зависимости от вашего случая использования, вы также можете взглянуть на библиотеки имитации DOM, такие как jsdom или здор`ово .Эти библиотеки очень ограничены с точки зрения их функциональности, и вам, возможно, придется реализовать части браузера самостоятельно, например, загрузить документ, прочитать и настроить заголовки для работы с файлами cookie и т. Д.


В целомЯ рекомендую пойти на кукольника, если вы хотите управлять браузером для выполнения задач в основном в фоновом режиме.Если вам нужно окно браузера как часть вашего приложения, перейдите на Electron.

...