Saltar a contenido

Configuración

En esta sección, aprenderás cómo configurar el marco de automatización web.

Este marco utiliza la API WebDriver para comunicarse con los navegadores para la automatización.

Para hacerlo, se requiere que el WebDriver del navegador elegido esté instalado y disponible preferiblemente en tu PATH. Si no puedes agregar el WebDriver necesario a tu PATH, podrás informar la ruta del driver a través de código en tu bot.

Aquí tienes una lista de navegadores compatibles junto con enlaces para descargar el WebDriver correspondiente:

Navegador Descarga del WebDriver
Chrome ChromeDriver
Firefox GeckoDriver
Edge MSDriverEdge
IE IEDriverServer

Por favor, sigue las instrucciones en el sitio web del WebDriver para la instalación y configuración.

Una vez que el WebDriver deseado para el navegador web esté instalado, podemos proceder a los siguientes pasos.

Personalización del navegador

Para proporcionar flexibilidad, tenemos propiedades que te permiten configurar qué navegador usar, la ubicación del WebDriver así como las opciones utilizadas al iniciar el navegador.

Las siguientes secciones cubrirán las posibles personalizaciones en detalle.

Selección del navegador

La plantilla de proyecto de BotCity está configurada de forma predeterminada para ejecutarse con Google Chrome. Puedes seleccionar cualquier otro navegador disponible estableciendo la propiedad browser en uno de los valores disponibles del enum Browser.

Aquí tienes un ejemplo de cómo cambiar el navegador predeterminado que se utilizará:

# Import the Browser enum
from botcity.web import WebBot, Browser

def main():
    # Instantiate the WebBot.
    bot = WebBot()

    # Configure whether or not to run on headless mode.
    bot.headless = False

    # Changes the Browser to Firefox.
    bot.browser = Browser.FIREFOX

    # For Chrome.
    # bot.browser = Browser.CHROME

    ...
import dev.botcity.framework.bot.WebBot;
// Import the Browser enum
import dev.botcity.framework.web.browsers.Browser;

...

public void action(BotExecution botExecution) {
    try {
        // Configure whether or not to run on headless mode
        setHeadless(false);

        //Changes the Browser to Firefox
        setBrowser(Browser.FIREFOX);

        // For Chrome
        // setBrowser(Browser.CHROME);

        ...

Del fragmento anterior, lo más importante es la parte browser en la que lo establecemos en uno de los valores del enum Browser, como se mencionó anteriormente.

Definición de la ruta del WebDriver

Si tu WebDriver para el navegador seleccionado no está disponible en el PATH del sistema, puedes indicar la ubicación a través de la propiedad driver path.

Aquí tienes cómo se puede hacer:

# Import the Browser enum
from botcity.web import WebBot, Browser

def main():
    # Instantiate the WebBot.
    bot = WebBot()

    # Configure whether or not to run on headless mode.
    bot.headless = False

    # Inform the WebDriver path for Google Chrome's chromedriver.
    bot.driver_path = "/home/username/drivers/chromedriver"

    ...
import dev.botcity.framework.bot.WebBot;
import dev.botcity.framework.web.browsers.Browser;

...

public void action(BotExecution botExecution) {
    try {
        // Configure whether or not to run on headless mode
        setHeadless(false);

        // Inform the WebDriver path for Google Chrome's chromedriver
        setDriverPath("/home/username/drivers/chromedriver");

        ...

Personalización de las opciones del navegador

Por defecto, los navegadores se inician con un conjunto de opciones seleccionadas que hemos considerado esenciales.

Antes de entrar en cómo personalizar esos detalles, repasemos algunas de las suposiciones y detalles que están cubiertos por las opciones predeterminadas.

  • Ejecución en modo sin cabeza: Dependiendo de la propiedad headless establecida en tu clase Bot, seleccionamos la configuración adecuada para iniciar el navegador en el modo deseado.

  • Ruta de la carpeta de descargas: Por defecto, guardamos todos los archivos descargados en la carpeta del desktop.

  • Perfil de usuario: Por defecto, generamos un directorio temporal (que se borra posteriormente) para ser utilizado como directorio de perfil. Este procedimiento asegura que cada ejecución comience con una sesión de navegador limpia y cosas como cookies y contraseñas almacenadas o certificados de una ejecución no interfieran con las demás.

  • Estrategia de carga de página: Por defecto, utilizamos la estrategia NORMAL, que espera a que la página se cargue por completo.

También se establecen algunas otras opciones que se pueden inspeccionar en el código fuente de cada navegador en el módulo adecuado del marco.

Si realmente necesitas personalizar las opciones, puedes hacerlo a través de la propiedad options. Puedes obtener las opciones predeterminadas seleccionadas por BotCity y realizar tus cambios o comenzar tus opciones desde cero.

En el siguiente fragmento, veremos cómo construir sobre las opciones existentes.

from botcity.web import WebBot, Browser, PageLoadStrategy

# For Chrome
from botcity.web.browsers.chrome import default_options
# For Firefox
#from botcity.web.browsers.firefox import default_options

def main():
    # Instantiate the WebBot.
    bot = WebBot()

    # Configure whether or not to run on headless mode.
    bot.headless = False

    # Fetch the default options for my preferred browser
    # Pass in the headless, download_folder_path and user_data_dir
    # to be used when building the default_options
    def_options = default_options(
        headless=bot.headless,
        download_folder_path=bot.download_folder_path,
        user_data_dir=None,  # Informing None here will generate a temporary directory
        page_load_strategy=PageLoadStrategy.NORMAL
    )

    # Add your customized argument
    def_options.add_argument("<My Special Argument>")

    # Update the options to use the customized Options.
    bot.options = def_options

    ...
import dev.botcity.framework.bot.WebBot;
import dev.botcity.framework.web.browsers.Browser;
import dev.botcity.framework.web.browsers.PageLoadStrategy;

// For Chrome
import dev.botcity.framework.web.browsers.ChromeConfig;
// For Firefox
// import dev.botcity.framework.web.browsers.FirefoxConfig;

...

public void action(BotExecution botExecution) {
    try {
        // Configure whether or not to run on headless mode
        setHeadless(false);

        // Fetch the default options for my preferred browser
        ChromeConfig chromeConfig = new ChromeConfig();
        ChromeOptions defOptions = (ChromeOptions) chromeConfig.defaultOptions(
                isHeadless(), // Setting headless mode (using default)
                getDownloadPath(), // Setting the download folder path (using default)
                null, // Informing null here will generate a temporary directory
                PageLoadStrategy.NORMAL // Setting the page load strategy
        );

        // Add your customized argument
        defOptions.addArguments("<My Special Argument>");

        // Update the options to use the customized Options.
        setOptions(defOptions);

        ...

Cada navegador compatible tendrá un módulo exclusivo con opciones predeterminadas seleccionadas accesibles a través de la función default options del módulo.

Esta función toma argumentos para definir el modo de ejecución (sin cabeza o no), la ruta predeterminada de la carpeta de descargas, el directorio de datos de usuario/perfil y la estrategia de carga de página, como se describe anteriormente.

Uso de otros navegadores

Puedes usar otros navegadores basados en Firefox o Chromium, o incluso versiones fijas de Chrome, Firefox o Edge.

Navegadores basados en Chromium:

Navegadores basados en Firefox:

Es sencillo utilizar estos navegadores en tu código; la única dependencia es la ruta al ejecutable/binario del navegador. Con eso en mano, puedes utilizarlo de la siguiente manera.

Important

El siguiente ejemplo utiliza Brave, pero los pasos son los mismos para todos los demás navegadores.

from botcity.web import WebBot, Browser

def main():
    # Instantiate the WebBot.
    bot = WebBot()

    # Configure whether or not to run on headless mode.
    bot.headless = False

    # Inform the WebDriver path for chromedriver
    bot.driver_path = "/home/username/drivers/chromedriver"

    # Inform the Browser path for Brave.
    bot.binary_path = "/usr/bin/brave-browser"