chromedriver chrome python selenium selenium-webdriver selenium-chromedriver google-chrome-headless

python - ¿Cómo configurar ChromeDriver para iniciar el navegador Chrome en modo sin cabeza a través de Selenium?



selenium headless python (4)

  1. El .exe se estaría ejecutando de todos modos. Según Google: "Ejecutar en modo sin cabeza, es decir, sin una interfaz de usuario o dependencias del servidor de visualización".

  2. Mejor anteponer 2 guiones a los argumentos de la línea de comando, es decir, options.add_argument(''--headless'')

  3. En modo sin cabeza, también se sugiere deshabilitar la GPU, es decir, options.add_argument(''--disable-gpu'')

Estoy trabajando en un script de Python para web scrape y he seguido el camino del uso de Chromedriver como uno de los paquetes. Me gustaría que esto funcione en segundo plano sin ninguna ventana emergente. Estoy usando la opción ''sin cabeza'' en chromedriver y parece hacer el trabajo en términos de no mostrar la ventana del navegador, sin embargo, todavía veo el archivo .exe ejecutándose. Vea la captura de pantalla de lo que estoy hablando. Screenshot

Este es el código que estoy usando para iniciar ChromeDriver:

options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"]) options.add_argument(''headless'') options.add_argument(''window-size=0x0'') chrome_driver_path = "C:/Python27/Scripts/chromedriver.exe"

Lo que he intentado hacer es alterar el tamaño de la ventana en las opciones a 0x0, pero no estoy seguro de que haya hecho algo ya que el archivo .exe aún apareció.

¿Alguna idea de cómo puedo hacer esto?

Estoy usando Python 2.7 FYI


Debe tener un aspecto como este:

from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument(''--headless'') options.add_argument(''--disable-gpu'') # Last I checked this was necessary. driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)

Esto funciona para mí usando Python 3.6, estoy seguro de que también funcionará para 2.7.

Actualización 2018-10-26 : En estos días puedes hacer esto:

from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.headless = True driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)


Entonces, después de corregir mi código para:

options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"]) options.add_argument(''--disable-gpu'') options.add_argument(''--headless'') chrome_driver_path = "C:/Python27/Scripts/chromedriver.exe"

El archivo .exe todavía apareció al ejecutar el script. Aunque esto eliminó algunos resultados adicionales que me decían "Error al iniciar el proceso de GPU".

Lo que terminó funcionando es ejecutar mi script Python usando un archivo .bat

Así que básicamente,

  1. Guardar script de Python si una carpeta
  2. Abra el editor de texto y descargue el siguiente código (edite en su script, por supuesto)

    c: / python27 / python.exe c: / SampleFolder / ThisIsMyScript.py% *

  3. Guarde el archivo .txt y cambie la extensión a .bat

  4. Haga doble clic para ejecutar el archivo.

Entonces, esto acaba de abrir el script en el símbolo del sistema y ChromeDriver parece estar operando dentro de esta ventana sin aparecer en el frente de mi pantalla y así resolver el problema.


Mientras trabaja con Selenium Client 3.11.x , ChromeDriver v2.38 y Google Chrome v65.0.3325.181 en modo sin cabeza , debe tener en cuenta los siguientes puntos:

  • --headless agregar el argumento - sin --headless para invocar Chrome en modo sin cabeza.
  • Para los sistemas operativos Windows, debe agregar el argumento --disable-gpu
  • Según Headless: hacer innecesario el indicador --disable-gpu no se requiere el indicador --disable-gpu en sistemas Linux y MacOS .
  • Según SwiftShader falla una afirmación en Windows en modo sin cabeza --disable-gpu indicador --disable-gpu será innecesario en los sistemas Windows .
  • Argumento de start-maximized es necesario para una vista maximizada.
    • Aquí está el enlace a los detalles sobre Viewport .
  • Es posible que deba agregar el argumento --no-sandbox para omitir el modelo de seguridad del sistema operativo.

    • Aquí está el enlace a la historia de Sandbox .
  • Ejemplo de bloque de código de Windows:

    from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless") # Runs Chrome in headless mode. options.add_argument(''--no-sandbox'') # Bypass OS security model options.add_argument(''--disable-gpu'') # applicable to windows os only options.add_argument(''start-maximized'') # options.add_argument(''disable-infobars'') options.add_argument("--disable-extensions") driver = webdriver.Chrome(chrome_options=options, executable_path=r''C:/path/to/chromedriver.exe'') driver.get("http://google.com/") print ("Headless Chrome Initialized on Windows OS")

  • Ejemplo de bloque de código de Linux:

    from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless") # Runs Chrome in headless mode. options.add_argument(''--no-sandbox'') # # Bypass OS security model options.add_argument(''start-maximized'') options.add_argument(''disable-infobars'') options.add_argument("--disable-extensions") driver = webdriver.Chrome(chrome_options=options, executable_path=''/path/to/chromedriver'') driver.get("http://google.com/") print ("Headless Chrome Initialized on Linux OS")

Actualización (23-abril-2018)

Invocar programáticamente el navegador Google Chrome en modo sin cabeza se ha vuelto mucho más fácil con la disponibilidad del método set_headless(headless=True) siguiente manera:

  • Documentación:

    set_headless(headless=True) Sets the headless argument Args: headless: boolean value indicating to set the headless option

  • Código de muestra :

    from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.set_headless(headless=True) driver = webdriver.Chrome(options=options, executable_path=r''C:/path/to/chromedriver.exe'') driver.get("http://google.com/") print ("Headless Chrome Initialized") driver.quit()

Nota : el argumento --disable-gpu se implementa internamente.

Actualización (13-octubre-2018)

Para invocar el navegador Chrome en modo sin cabeza ahora, puede configurar la propiedad --headless través de la clase Options() la siguiente manera:

  • Código de muestra :

    from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.headless = True driver = webdriver.Chrome(options=options, executable_path=r''C:/path/to/chromedriver.exe'') driver.get("http://google.com/") print ("Headless Chrome Initialized") driver.quit()

Outro

¿Cómo hacer que Firefox no tenga cabeza mediante programación en Selenium con Python?