Funciones y opciones de Chrome

Las funciones son opciones que puedes usar para personalizar y configurar una sesión de ChromeDriver. En esta página, se documentan todas las funciones compatibles con ChromeDriver y cómo usarlas.

Las APIs de lenguaje WebDriver ofrecen alternativas para transferir funciones a ChromeDriver. El mecanismo exacto difiere según el idioma, pero la mayoría de los idiomas utilizan uno de los siguientes mecanismos o ambos:

  1. Usa la clase ChromeOptions. Esto es compatible con Java, Python, etcétera.
  2. Usa la clase DesiredCapabilities. Esta función es compatible con Python, Ruby, etc. Si bien también está disponible en Java, su uso en Java dejó de estar disponible.

Cómo usar la clase ChromeOptions

Puedes crear una instancia de ChromeOptions, que tiene métodos convenientes para configurar funciones específicas de ChromeDriver. Luego, puedes pasar el objeto ChromeOptions al constructor de ChromeDriver:

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

A partir de Selenium 3.6.0, la clase ChromeOptions en Java también implementa la interfaz Capabilities, lo que te permite especificar otras capacidades de WebDriver no específicas de ChromeDriver.

ChromeOptions options = new ChromeOptions();

// Add the WebDriver proxy capability.
Proxy proxy = new Proxy();
proxy.setHttpProxy("myhttpproxy:3337");
options.setCapability("proxy", proxy);

// Add a ChromeDriver-specific capability.
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

Usa DesiredCapabilities

Para usar DesiredCapabilities, debes conocer el nombre de la función y el tipo de valor que toma. Consulta la lista completa aquí.

Python

caps = webdriver.DesiredCapabilities.CHROME.copy() 
caps['acceptInsecureCerts'] = True
driver = webdriver.Chrome(desired_capabilities=caps)

Ruby

caps = Selenium::WebDriver::Remote::Capabilities.chrome(
     "goog:chromeOptions" => {"args" => [ "window-size=1000,800" ]})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps

Casos de uso habituales

Usa un perfil personalizado (también llamado directorio de datos del usuario)

De forma predeterminada, ChromeDriver creará un nuevo perfil temporal para cada sesión. En ocasiones, es posible que desees configurar preferencias especiales o simplemente usar un perfil personalizado por completo. Si es lo primero, puedes usar la función "chrome.prefs" (que se describe más adelante) para especificar las preferencias que se aplicarán una vez que se inicie Chrome. De lo contrario, puedes usar el interruptor de línea de comandos de Chrome user-data-dir para indicarle a Chrome qué perfil usar:

ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=/path/to/your/custom/profile");

Puedes crear tu propio perfil personalizado simplemente ejecutando Chrome (en la línea de comandos o a través de ChromeDriver) con el interruptor user-data-dir establecido en algún directorio nuevo. Si la ruta no existe, Chrome creará un perfil nuevo en la ubicación especificada. Luego, puedes modificar la configuración del perfil como desees y ChromeDriver podrá usar el perfil en el futuro. Abre chrome://version en el navegador para ver qué perfil usa Chrome.

Iniciar Chrome maximizado

ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");

Usar un archivo ejecutable de Chrome en una ubicación no estándar

ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/other/chrome/binary");

Cómo bloquear ventanas de diálogo

De forma predeterminada, ChromeDriver configura Chrome para permitir ventanas emergentes. Si deseas bloquear las ventanas emergentes (es decir, restablecer el comportamiento normal de Chrome cuando ChromeDriver no las controla), haz lo siguiente:

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches",
     Arrays.asList("disable-popup-blocking"));

Configurar el directorio de descarga

El siguiente código permite configurar Chrome para que descargue archivos en un directorio específico. Sin embargo, debes tener en cuenta varias advertencias:

  • Chrome no permite el uso de ciertos directorios para la descarga. En particular, no puedes usar la carpeta de escritorio como el directorio de descarga. En Linux, tampoco puedes usar el directorio principal para la descarga. Dado que la lista exacta de directorios prohibidos está sujeta a cambios, te recomendamos que uses un directorio que no tenga un significado especial para el sistema.
  • ChromeDriver no espera automáticamente a que se complete la descarga. Si llamas a drive.quit() demasiado pronto, es posible que Chrome se cierre antes de que finalice la descarga.
  • Las rutas de acceso relativas no siempre funcionan. Para obtener el mejor resultado, usa la ruta de acceso completa.
  • En Windows, usa "" como separador de ruta. El uso de "/" no es confiable en Windows.
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("download.default_directory", "/directory/path");
options.setExperimentalOption("prefs", prefs);

Capacidades reconocidas

Consulta la documentación de Selenium y el estándar W3C WebDriver para conocer las funciones estándar que acepta ChromeDriver. Aquí solo enumeramos las funciones específicas de Chrome.

Objeto ChromeOptions

La mayoría de las funciones específicas de Chrome se exponen a través del objeto ChromeOptions. En algunos lenguajes, la clase ChromeOptions lo implementa. En otros idiomas, se almacenan en el diccionario goog:chromeOptions en las capacidades deseadas.

Nombre Tipo Configuración predeterminada  Descripción 
args  lista de cadenas   Lista de argumentos de la línea de comandos que se deben usar al iniciar Chrome. Los argumentos con un valor asociado deben separarse por un signo “=” (p.ej., ['start-maximized', 'user-data-dir=/tmp/temp_profile']). Consulta aquí una lista de argumentos de Chrome.
binary cadena   Ruta de acceso al ejecutable de Chrome que se debe usar (en Mac OS X, este debe ser el objeto binario real, no solo la app, como '/Applications/Google Chrome. app/Contents/MacOS/Google Chrome').
extensions lista de cadenas   Una lista de extensiones de Chrome para instalar al inicio. Cada elemento de la lista debe ser una extensión de Chrome empaquetada y codificada en base 64 (.crx)
localState dictionary   Un diccionario en el que cada entrada consta del nombre de la preferencia y su valor. Estas preferencias se aplican al archivo de estado local en la carpeta de datos del usuario.
prefs dictionary   Un diccionario en el que cada entrada consta del nombre de la preferencia y su valor. Estas preferencias solo se aplican al perfil del usuario en uso. Consulta el archivo "Preferencias" en el directorio de datos de usuario de Chrome para ver ejemplos.
detach boolean false Si se establece como "false", Chrome se cerrará cuando se cierre ChromeDriver, independientemente de si se cierra la sesión. Si esta preferencia se establece como "true", Chrome solo se cerrará si se cierra (o se cierra) la sesión. Ten en cuenta que, si es "true" y la sesión no se cierra, ChromeDriver no puede limpiar el directorio de datos temporales del usuario que usa la instancia de Chrome en ejecución.
debuggerAddress cadena
Una dirección de un servidor depurador de Chrome al que se conectará, con el formato <hostname/ip:port>; p.ej., "127.0.0.1:38947"
excludeSwitches lista de cadenas   La lista de líneas de comandos de Chrome cambia a excluir que ChromeDriver pase de forma predeterminada cuando se inicia Chrome. No uses el prefijo -- para los interruptores.
minidumpPath  cadena   Directorio para almacenar minivolcados de Chrome . (Solo compatible con Linux).
mobileEmulation dictionary   Un diccionario con un valor para "deviceName" o valores para "deviceMetrics" y "userAgent". Consulta Emulación de dispositivos móviles para obtener más información.
perfLoggingPrefs dictionary   Es un diccionario opcional que especifica las preferencias de registro de rendimiento. Obtenga más información a continuación.
windowTypes lista de cadenas   Lista de tipos de ventana que aparecerán en la lista de controladores de ventana. Para acceder a los elementos <webview>, incluye "vista web" en esta lista.

Objeto perfLoggingPrefs

El diccionario perfLoggingPrefs tiene el siguiente formato (todas las claves son opcionales):

Nombre Tipo Predeterminada Descripción
enableNetwork boolean true Indica si se deben recopilar eventos del dominio de la red o no.
enablePage boolean true Indica si se deben recopilar o no eventos del dominio de la página.
traceCategories cadena (vacío) Es una cadena de categorías de registro de Chrome separada por comas para la que se deben recopilar eventos de seguimiento. Una string vacía o sin especificar inhabilita el seguimiento.
bufferUsageReportingInterval número entero positivo 1,000 La cantidad de milisegundos solicitada entre los eventos de uso del búfer de seguimiento de Herramientas para desarrolladores. Por ejemplo, si es 1000, una vez por segundo, Herramientas para desarrolladores informará qué tan lleno está el búfer de seguimiento. Si un informe indica que el uso del búfer es del 100%, se emitirá una advertencia.

Capacidades devueltas

Esta es una lista de todas las funciones que se muestran específicas de Chrome. (es decir, lo que muestra ChromeDriver cuando creas una sesión nueva)

Nombre Tipo  Descripción 
chrome.chromedriverVersion cadena versión de ChromeDriver
userDataDir cadena ruta de acceso al directorio de datos del usuario que usa Chrome; ten en cuenta que se encuentra dentro de un diccionario de "chrome"