Modo sin interfaz gráfica de Chrome

Peter Kvitek
Peter Kvitek

Con el modo sin interfaz gráfica de Chrome, puede ejecutar el navegador en un entorno sin supervisión sin ninguna IU visible. Básicamente, puedes ejecutar Chrome sin Chrome.

El modo sin interfaz gráfica es una opción popular para la automatización de navegadores en proyectos como Puppeteer o ChromeDriver.

Cómo usar el modo sin interfaz gráfica

Para usar el modo sin interfaz gráfica, pasa la marca de línea de comandos --headless:

chrome --headless

Cómo usar el modo sin interfaz gráfica anterior

Anteriormente, el modo sin interfaz gráfica era una implementación independiente y alternativa para navegadores que se enviaron como parte del mismo objeto binario de Chrome. No se compartió ningún código del navegador Chrome en //chrome

Chrome ahora unificó los modos sin interfaz gráfica y con interfaz gráfica.

El modo sin interfaz gráfica comparte el código con Chrome.

Por ahora, el modo sin interfaz gráfica anterior sigue disponible con lo siguiente:

chrome --headless=old

En Puppeteer

Sigue estos pasos para usar el modo sin interfaz gráfica en Puppeteer:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  headless: 'true', // (default) enables Headless
  // `headless: 'old'` enables old Headless
  // `headless: false` enables "headful" mode
});

const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');

// …

await browser.close();

En Selenium-WebDriver

Para usar el modo sin interfaz gráfica en Selenium-WebDriver, haz lo siguiente:

const driver = await env
  .builder()
  .setChromeOptions(options.addArguments('--headless'))
  .build();

await driver.get('https://developer.chrome.com/');

// …

await driver.quit();

Consulta la entrada de blog del equipo de Selenium para obtener más información, incluidos ejemplos en los que se usan otras vinculaciones de lenguajes.

Marcas de línea de comandos

Las siguientes marcas de línea de comandos están disponibles en el modo sin interfaz gráfica.

--dump-dom

La marca --dump-dom imprime el DOM serializado de la página de destino en stdout. Por ejemplo:

chrome --headless --dump-dom https://developer.chrome.com/

Esto es diferente de imprimir el código fuente HTML, lo que podría hacer con curl Para obtener el resultado de --dump-dom, Chrome primero analiza el HTML código en un DOM, ejecuta cualquier <script> que pueda alterar el DOM, luego vuelve a convertir ese DOM en una cadena serializada de HTML.

--screenshot

La marca --screenshot toma una captura de pantalla de la página de destino y la guarda como screenshot.png en el directorio de trabajo actual. Esto es especialmente útil en con la marca --window-size.

Por ejemplo:

chrome --headless --screenshot --window-size=412,892 https://developer.chrome.com/

--print-to-pdf

La marca --print-to-pdf guarda la página de destino como un PDF con el nombre output.pdf en el directorio de trabajo actual. Por ejemplo:

chrome --headless --print-to-pdf https://developer.chrome.com/

De manera opcional, puedes agregar la marca --no-pdf-header-footer para omitir la impresión encabezado (con la fecha y hora actuales) y pie de página (con la URL y la página ).

chrome --headless --print-to-pdf --no-pdf-header-footer https://developer.chrome.com/

No: La funcionalidad detrás de la marca --no-pdf-header-footer era disponible con la marca --print-to-pdf-no-header. Es posible que debas recurrir el nombre de la marca anterior, si se usa una versión anterior.

--timeout

La marca --timeout define el tiempo de espera máximo (en milisegundos) después del cual --dump-dom, --screenshot y --print-to-pdf, incluso si la página aún se está cargando.

chrome --headless --print-to-pdf --timeout=5000 https://developer.chrome.com/

La marca --timeout=5000 le indica a Chrome que espere hasta 5 segundos antes de imprimir. el PDF. Por lo tanto, este proceso tarda como máximo 5 segundos en ejecutarse.

--virtual-time-budget

El elemento --virtual-time-budget actúa como una función de "avance". para cualquier código dependiente del tiempo (por ejemplo, setTimeout/setInterval). Obliga al navegador a ejecutar cualquier del código de la página lo más rápido posible y, al mismo tiempo, hacer que la página crea que el pasa el tiempo.

Para ilustrar su uso, consideremos esta demostración, aumenta, registra y muestra un contador cada segundo usando setTimeout(fn, 1000). Este es el código relevante:

<output>0</output>
<script>
  const element = document.querySelector('output');
  let counter = 0;
  setInterval(() => {
    counter++;
    console.log(counter);
    element.textContent = counter;
  }, 1_000);
</script>

Después de un segundo, la página contiene "1". después de dos segundos, "2", y así sucesivamente. A continuación, te mostramos cómo capturar el estado de la página después de 42 segundos y guardarlo como PDF:

chrome --headless --print-to-pdf --virtual-time-budget=42000 https://mathiasbynens.be/demo/time

--allow-chrome-scheme-url

La marca --allow-chrome-scheme-url es necesaria para acceder a las URLs de chrome://. Esta función experimental está disponible a partir de Chrome 123. Por ejemplo:

chrome --headless --print-to-pdf --allow-chrome-scheme-url chrome://gpu

Depurar

Dado que Chrome es invisible en el modo sin interfaz gráfica, es posible que parezca complicado para resolver un problema. Es posible depurar Headless Chrome de una manera muy de manera similar a Chrome.

Inicia Chrome en modo sin interfaz gráfica con el Marca de línea de comandos --remote-debugging-port.

chrome --headless --remote-debugging-port=0 https://developer.chrome.com/

Esto imprime una URL única de WebSocket en stdout, por ejemplo:

DevTools listening on ws://127.0.0.1:60926/devtools/browser/b4bd6eaa-b7c8-4319-8212-225097472fd9

En una instancia principal de Chrome, podemos usar Depuración remota de las Herramientas para desarrolladores de Chrome para conectarse al destino sin interfaz gráfica y, luego, inspeccionarlo.

  1. Ve a chrome://inspect y haz clic en el botón Configurar....
  2. Ingresa la dirección IP y el número de puerto de la URL de WebSocket.
    • En el ejemplo anterior, ingresé 127.0.0.1:60926.
  3. Haz clic en Listo. Deberías ver un Destino remoto aparecer con todas sus pestañas y con otros objetivos de la lista.
  4. Haz clic en inspect para acceder a las Herramientas para desarrolladores de Chrome e inspeccionar el control remoto. Destino sin interfaz gráfica, que incluye una visualización en vivo de la página.

Las Herramientas para desarrolladores de Chrome pueden inspeccionar una página de destino remota sin interfaz gráfica

Comentarios

Esperamos recibir tus comentarios sobre el modo sin interfaz gráfica. Si si encuentras algún problema, informa un error.