Есть ли способ запустить Google Chrome в режиме без головы? - PullRequest
57 голосов
/ 09 февраля 2012

Я тщательно пересмотрел список переключателей на http://peter.sh/experiments/chromium-command-line-switches/#chrome-frame и не смог найти ничего, что запустило бы Chrome в скрытом фоновом процессе.

Самое близкое, на что я смог, это --keep-alive-for-test+ пользовательское упакованное приложение, но приложение не может выполнить любой переданный код, потому что (как он сообщает) «нет окна - ChromeHidden».

Ответы [ 11 ]

62 голосов
/ 09 декабря 2015

TL; DR

google-chrome --headless --remote-debugging-port=9222 http://example.com

Вам также потребуется временно --disable-gpu.


Учебник :

https://developers.google.com/web/updates/2017/04/headless-chrome


Идет работа: https://code.google.com/p/chromium/issues/detail?id=546953

Основные результаты:

  1. Библиотека, на которую могут ссылаться безголовые приложения.
  2. Пример приложения, демонстрирующего использование API-интерфейсов без головы.

Таким образом, можно создать простое приложение, которое будет работать в консоли без подключения к дисплею.

Обновление от 18 апреля '16: Работа в основном выполнена. Сейчас есть публичный форум:

https://groups.google.com/a/chromium.org/forum/#!forum/headless-dev

Документация находится в стадии разработки:

https://chromium.googlesource.com/chromium/src/+/master/headless/README.md

Обновление 20 сентября '16: Похоже, что chrome в конечном итоге получит параметр --headless: https://bugs.chromium.org/p/chromium/issues/detail?id=612904

Была презентация на BlinkOn 6 (16/17 июня 2016 г.)

Обновление от 29 ноября '16: Дизайн документа для --headless Флаг: https://docs.google.com/document/d/1aIJUzQr3eougZQp90bp4mqGr5gY6hdUice8UPa-Ys90/edit#heading=h.qxqfzv2lj12s

Обновление от 13 декабря '16: --headless флаг, как ожидается, будет доступен в сборках Canary в ближайшее время

Обновление от 12 марта 17 года: В Chrome 57 установлен флаг --headless. В ожидании Selenium и других инструментов, чтобы наверстать упущенное. Руководство пользователя: https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

23 голосов
/ 09 февраля 2012

Этому парню удалось запустить Chrome без головы, используя Xvfb (виртуальный кадровый буфер X), чтобы обмануть Chrome, заставляя его думать, что он отображает окно:

http://e -method.blogspot.fr / 2010/11 / Google-хром-с-Xvfb-безголовый-server.html

Если вы работаете в Linux, вы можете попробовать это.

Таким образом, вам нужно установить виртуальный фрейм-буфер X и Google Chrome:

root@localhost: ~# apt-get install xvfb imagemagick
root@localhost: ~# apt-get install google-chrome

Затем запустите браузер на дисплее:

root@localhost: ~# xvfb-run --server-args='-screen 0, 1024x768x24' \
google-chrome -start-maximized http://www.example.com \
> & /dev/null &
root@localhost: ~# DISPLAY=:99 import -window root myimage.png
12 голосов
/ 16 мая 2012

Или вы можете взглянуть на PhantomJS проект, который представляет собой реализацию WebKit без головы.

7 голосов
/ 09 июля 2012

Вы можете настроить виртуальную машину linux и использовать в ней xvfb.

Установка в debian / ubuntu:

sudo aptitude install xvfb

Запустите Chrome без заголовка и посетите http://example.com:

xvfb-run --server-args='-screen 0, 1024x768x16' google-chrome 
    -start-maximized http://example.com > /dev/null &
7 голосов
/ 31 марта 2012

Оказывается, он запускается в режиме без головы, если вы запускаете его как дочерний подпроцесс.Кроме того:

  • nircmd.exe может выполнять win hide для Chrome на основе его PID
  • Autohotkey_L также может запускать Chrome, скрытый без кнопки панели задач
5 голосов
/ 10 февраля 2012

Проект Chromium Embedded Framework выглядит так, как будто он подходит вашему варианту использования.У меня нет личного опыта с проектом, но я слышал хорошие вещи, и у него есть надежный API, который вы сможете использовать для своих целей.

3 голосов
/ 21 апреля 2017

У меня пока недостаточно репутации, чтобы комментировать, но я хочу, чтобы вы, ребята, знали, что режим безголового Chrome, о котором упоминает Вануан, действительно работает с веб-драйвером Selenium.

В Java вы можете передать флаг chromeчерез chromeDriver со следующим кодом:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
2 голосов
/ 19 августа 2015

Я недавно нашел эту статью , в которой упоминается несколько параметров командной строки, которые, кажется, делают это. Используя эти ключевые слова, я погуглил этот кусок кода , который, кажется, подтверждает, что эти опции существуют.

// Does not automatically open a browser window on startup (used when
// launching Chrome for the purpose of hosting background apps).
const char kNoStartupWindow[]               = "no-startup-window";

// Causes Chrome to launch without opening any windows by default. Useful if
// one wishes to use Chrome as an ash server.
const char kSilentLaunch[]                  = "silent-launch";

Мне удалось успешно запустить Chrome с --no-startup-window, и он действительно запустился без окон. Это выглядело так, как будто оно запускалось должным образом, оно порождало всех типичных детей, но сайт, который я пытался загрузить внутри, на самом деле не был посещен. Возможно, что этот режим без заголовка предназначен только для запуска приложений, а не для посещения сайтов без заголовка *), но он выглядит очень многообещающе, так как настроено обычное рабочее дерево, просто без окон.

Второй вариант --silent-launch сделал процесс Chrome очень тихим. Я не заметил детей, и процесс быстро закончился. Я сомневаюсь, что это пригодится для этого случая.

После того, как я провалил свои попытки с этими опциями, я сосредоточился на менее изощренных способах. Внизу списка есть два варианта:

// Specify the initial window position: --window-position=x,y
const char kWindowPosition[]                = "window-position";

// Specify the initial window size: --window-size=w,h
const char kWindowSize[]                    = "window-size";

Я запустил Chrome с возможностью полностью вывести его из рабочей области:

--window-size=800,600 --window-position=-800,0

и какой бы грязной она ни была, конечно, она не лишена смысла, но окно все еще не видно, и все сделано только с помощью параметров запуска chrome, без внешних инструментов, отправляющих низкоуровневые сообщения о скрытии окна.

*) да, я знаю, пытаться делать странные вещи. По сути, я пытался избавиться от окна Chrome, которое хранит Карма во время тестов. Я знаю, что могу переключиться на PhantomJS, но мне нужно было запустить их в Chrome, и всплывающее окно было ... э ... тревожным в долгосрочной перспективе.

0 голосов
/ 03 июля 2017

Chrome 59 имеет возможность создавать экземпляры как безголовые. Найдите ниже учебник https://www.automation99.com/2017/07/how-to-use-chrome-headless-using.html?m=1

0 голосов
/ 26 апреля 2017

Мне также удалось заставить хром работать без наушников с NightwatchJS.Вот конфиг, который позволяет мне использовать его:

    "chromeHeadless": {
  "desiredCapabilities": {
    "browserName": "chrome",
    "chromeOptions": {
      "args": ["--headless"],
      "binary": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"
    }
  }
}
...