es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cerrando el controlador de Selenium durante un bucle for.

Nuevo en selenium aquí. Me disculpo de antemano si la respuesta a esto estaba justo enfrente de mí, pero no logro resolver este problema.

Tengo un bucle for en un script de web scraping y funciona bien. Sin embargo, durante la ejecución, el controlador web cierra la ventana y el código sigue ejecutándose sin ningún navegador Chrome abierto. Aquí está el bucle for:

for (let i = 1; i < 3000; i++) {
  let continueCodeExecution = false;

  // Verificar si existe un elemento con una advertencia indicando que el id no existe en la base de datos.
  // Si la instrucción try tiene éxito, significa que el elemento no existe en la base de datos.
  try {
    await driver.get(`https://tbc.wowhead.com/spell=${i}`);
    const notFoundElement = await driver.findElement(
      By.xpath(
        "//div[contains(text(), 'Puede haber sido eliminado del juego.')]"
      )
    );
    arrayOfFailedSpellIDs.push(i);
    console.log(`ID de Hechizo: ${i}, confirmado que no existe`);
  } catch (error) {
    // Si se entra en este bloque catch, no se pudo encontrar el elemento, lo que significa que el id existe.
    continueCodeExecution = true;
    console.log(`ID de Hechizo: ${i} no encontró el notFoundElement.`);
  }

  // Esto solo se ejecuta si no se pudo encontrar el notFoundElement en el DOM.
  if (continueCodeExecution === true) {
    try {
      const dataToPushToArray = await parseToolTipInOrder(i, driver);
      arrayOfScrapedData.push(dataToPushToArray);
    } catch (error) {
      arrayOfPotentiallySkippedIDs.push(i);
      console.log(`ID de Hechizo: ${i}, ¡Error al extraer los datos!`);
    }
  }
}

¿Alguna idea de cómo resolver esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basado en el código proporcionado, parece que el problema puede estar relacionado con el hecho de que el controlador del navegador no se está cerrando correctamente. Una forma de solucionar esto es agregar el método driver.quit() al final del bucle for para asegurarse de que el controlador del navegador se cierre y también se cierren todas las ventanas asociadas. Esto se puede agregar de la siguiente manera:

    for (let i = 1; i < 3000; i++) {
      // código como antes
    
      if (continueCodeExecution === true) {
        // código como antes
      }
    }
    
    // Cerrar el controlador del navegador después de que el bucle haya terminado de ejecutarse
    await driver.quit();
    

    Al hacer esto, el controlador del navegador se cerrará correctamente y se cerrarán todas las ventanas abiertas, evitando el problema de que la ventana del navegador se cierre durante la ejecución.

Comments are closed.