python - ¿Cómo configurar ChromeDriver para iniciar el navegador Chrome en modo sin cabeza a través de Selenium?
selenium headless python (4)
-
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".
-
Mejor anteponer 2 guiones a los argumentos de la línea de comando, es decir,
options.add_argument(''--headless'')
-
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,
- Guardar script de Python si una carpeta
-
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% *
-
Guarde el archivo .txt y cambie la extensión a .bat
- 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?