google-chrome - support - puppeteer chromium
¿Cómo uso Headless Chrome en Chrome 60 en Windows 10? (6)
He estado mirando el siguiente artículo sobre Headless Chrome:
https://developers.google.com/web/updates/2017/04/headless-chrome
Acabo de actualizar Chrome en Windows 10 a la versión 60, pero cuando ejecuto cualquiera de los siguientes comandos desde la línea de comandos, no sucede nada:
chrome --headless --disable-gpu --dump-dom https://www.google.com/
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/
Y estoy ejecutando todos estos comandos desde la siguiente ruta (la ruta de instalación predeterminada para Chrome en Windows):
C:/Program Files (x86)/Google/Chrome/Application/
Cuando ejecuto los comandos, algo parece procesarse por un segundo, pero en realidad no veo nada. ¿Qué estoy haciendo mal?
Gracias.
Editar:
Como señaló Mark Rajcok, si agrega --enable-logging
al comando --dump-dom
, funciona. Además, el --print-to-pdf
funciona en Chrome 61.0.3163.79, pero probablemente tendrás que especificar una ruta diferente para el archivo de salida para tener los permisos necesarios para guardarlo.
Como tal, los siguientes dos comandos funcionaron para mí:
"C:/Program Files (x86)/Google/Chrome/Application/chrome" --headless --disable-gpu --enable-logging --dump-dom https://www.google.com/
"C:/Program Files (x86)/Google/Chrome/Application/chrome" --headless --disable-gpu --print-to-pdf=D:/output.pdf https://www.google.com/
Supongo que el siguiente paso es poder atravesar el DOM volcado como PhantomJS con selectores de DOM y todo eso, pero supongo que esa es una pregunta aparte.
Con Chrome 61.0.3163.79, si agrego --enable-logging
entonces --dump-dom
produce salida:
> "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --enable-logging --headless --disable-gpu --dump-dom https://www.chromestatus.com
<body class="loading" data-path="/features">
<app-drawer-layout fullbleed="">
...
</script>
</body>
Si quieres controlar Chrome sin programación, aquí hay una forma de hacerlo con Python3 y Selenium:
En una ventana de Admin cmd, instale Selenium para Python:
C:/Users/Mark> pip install -U selenium
Download ChromeDriver v2.32 y extráelo. Puse el chromedriver.exe
en C:/Users/Mark
, que es donde puse este script de Python headless.py
cabeza.py:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless") # remove this line if you want to see the browser popup
driver = webdriver.Chrome(chrome_options = options)
driver.get(''https://www.google.com/'')
print(driver.page_source)
driver.quit() # don''t miss this, or chromedriver.exe will keep running!
Ejecutarlo en una ventana cmd normal:
C:/Users/Mark> python headless.py
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" ...
... lots and lots of stuff here ...
...</body></html>
Debes ser bueno. Compruebe en el directorio de versión de Chrome
C:/Program Files (x86)/Google/Chrome/Application/60.0.3112.78
Para el comando
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/
C:/Program Files (x86)/Google/Chrome/Application/60.0.3112.78/output.pdf
Editar: aún se ejecutan los comandos donde está el ejecutable de Chrome, en este caso
C:/Program Files (x86)/Google/Chrome/Application/
Esto funciona para mí:
start chrome --enable-logging --headless --disable-gpu --print-to-pdf=c:/misc/output.pdf https://www.google.com/
... pero solo con "start chrome" y "--enable-logging" y con una ruta (para el pdf) especificada, y si la carpeta "misc" existe en el directorio c.
Adición: ... la ruta para el pdf - "c: / misc" anterior - por supuesto puede reemplazarse con cualquier otra carpeta / dir.
Las versiones actuales (68-70) parecen requerir --no-sandbox
para ejecutarse, sin ello no hacen absolutamente nada y se cuelgan en segundo plano.
Los comandos completos que uso son:
chrome --headless --user-data-dir=tmp --no-sandbox --enable-logging --dump-dom https://www.google.com/ > file.html
chrome --headless --user-data-dir=tmp --no-sandbox --print-to-pdf=whatever.pdf https://www.google.com/
Usar --no-sandbox
es una idea bastante mala y debería usarla solo para sitios web confiables, pero lamentablemente es la única forma de hacer que funcione.
--user-data-dir=...
usa el directorio especificado en lugar del predeterminado, que probablemente ya esté usando su navegador habitual.
Sin embargo, si está intentando crear un PDF a partir de HTML, entonces esto es bastante inútil, ya que no puede eliminar el encabezado y el pie de página (que contiene texto como file:///...
) y la única solución viable es utilizar Puppeteer
Sé que esta pregunta es para Windows, pero como Google ofrece esta publicación como primer resultado de búsqueda, esto es lo que funciona en Mac:
Mac OS X
/Applications/Google/ Chrome.app/Contents/MacOS/Google/ Chrome --headless --dump-dom ''http://www.google.com''
Tenga en cuenta que DEBE poner el http
o no funcionará.
Más consejos
Para sangrar el html (que es altamente deseable en páginas reales que están hinchadas), use tidy
:
/Applications/Google/ Chrome.app/Contents/MacOS/Google/ Chrome --headless --dump-dom ''http://www.google.com'' | tidy
Puedes ponerte ordenado con:
brew install tidy
Si desea esquivar el problema en general, y simplemente usar un servicio de algún tipo para hacer el trabajo por usted, soy el autor / fundador de browserless que intenta abordar el funcionamiento de Chrome sin cabeza de manera similar a un servicio. Aparte de eso, es bastante difícil mantenerse al día con los cambios y asegurarte de que todos los paquetes y recursos apropiados estén instalados para que Chrome funcione, pero definitivamente es factible.