Gran Guía de Aprendizaje de la Clase Titiritero (Tutorial 7)

Puppeteer, que es una biblioteca js de nodo de código abierto, se puede utilizar como herramienta de raspado web. La comprensión de la estructura DOM de línea de comandos, Javascript y HTML debería ser bueno para comenzar con este tutorial titiritero. El tutorial Series of Puppeteer se distribuye entre la subsección a continuación para obtener un buen control de Puppeteer. 

Tutorial de titiritero

Titiritero Tutoría #1: Descripción general del titiritero

Tutorial del titiritero #2: Variables de entorno del titiritero

Titiritero Tutoría #3: Descripción general de la automatización de pruebas de titiritero y raspado web de titiritero

Titiritero Tutoría #4: Instalar Titiritero

Titiritero Tutoría #5: Proyecto de muestra de titiritero

Titiritero Tutoría #6: Pruebas de automatización de titiriteros

Titiritero Tutoría #7: Clase de titiritero

Titiritero Tutoría #8: Clase de navegador titiritero

Titiritero Tutorial n.º 9: clase de página de titiritero

En este tutorial de "Clase de titiritero", explicaremos las clases a continuación que incluyen los espacios de nombres importantes (si los hay), los eventos (si los hay) y los métodos que se utilizan con frecuencia en las técnicas de raspado web de Titiritero. 

Explicaremos componentes importantes con ejemplos a lo largo de este artículo.  

Clase de titiritero

Conceptualmente, la clase es un plano de un objeto que define un conjunto de instrucciones (variables y métodos). Aquí, la clase Puppeteer se define usando javascript para realizar diferentes acciones para realizar web scraping. Veamos el siguiente ejemplo, el módulo de la clase Puppeteer se ha utilizado para lanzar una instancia web de Chromium.

const titiritero = require('titiritero'); (async () => { const browserChrome = esperar a titiritero.launch(); const pageChrome = esperar a browserChrome.newPage(); esperar a pageChrome.goto('https://www.google.com'); // Podemos escribir pasos aquí esperan browserChrome.close(); })();

La clase Puppeteer también proporciona múltiples espacios de nombres y métodos, que admiten el proceso de raspado web. Los espacios de nombres y métodos de uso frecuente se explican en las siguientes secciones.

Clase Titiritero - Espacios de nombres:

Es un contenedor que define múltiples identificadores, métodos, variables, etc., en javascript. Es una forma de agrupar el código de forma lógica y organizada. Los siguientes espacios de nombres son proporcionados por la clase Titiritero.

titiriteros.dispositivos: Devuelve una lista de dispositivos que puede utilizar el método page.emulate (opciones) para realizar scraping en dispositivos móviles. 

Ejemplo: abrir y cerrar la página web de Google en un dispositivo móvil -

const titiritero = require('titiritero'); const samsung = titiritero.dispositivos['Samsung J5']; (async () => { const browserChrome = esperar a titiritero.launch(); const pageChrome = esperar a browserChrome.newPage(); esperar a pageChrome.emulate(samsung); esperar a pageChrome.goto('https://www.google.com '); espera browserChrome.close(); })();

titiritero.errores: Al trabajar con diferentes métodos de titiritero, existe la posibilidad de excepciones. Sobre todo, si los métodos no pueden cumplir con las solicitudes, arroja errores. Hay diferentes clases definidas para manejar errores a través del espacio de nombres 'puppeteer.errors'.

Ejemplo: para el método page.waitForSelector, si el elemento web no aparece dentro del tiempo especificado, aparecerá el error de tiempo de espera. Consulte el siguiente ejemplo, que muestra un enfoque para manejar el tiempo de espera,

intente { esperar page.waitForSelector(' '); } catch (err) { if (err instanceof puppeteer.errors.TimeoutError) { // Escribir código para manejar el error de tiempo de espera. } } 

puppeteer.network Condiciones: Devuelve una lista de condiciones de red que se pueden usar en la página del método.emulateNetworkConditions (networkConditions). Se define la lista completa de condiciones de la red esta página.

Ejemplo: a través de esta muestra de código, abriremos la página web de Google utilizando una condición de red predefinida.

const titiritero = require('titiritero'); const net = titiritero.networkConditions['Fast 3G']; (async () => { const browserChrome = esperar a titiritero.launch(); const pageChrome = esperar a browserChrome.newPage(); esperar a pageChrome.emulateNetworkConditions(net); esperar a pageChrome.goto('https://www.google.com '); espera browserChrome.close(); })();

titiritero.producto: Devuelve el nombre del navegador, que se utilizará para la automatización (Chrome o Firefox). El producto para el navegador se establece mediante la variable de entorno PUPPETEER_PRODUCT o la opción de producto disponible en el método de la clase titiritero puppeteer.launch ([opciones]). El valor predeterminado es Chrome.

Referencia: Haga Clic en esta página para obtener más información sobre los espacios de nombres de clases de titiriteros.

Clase de titiritero - Métodos:

Los métodos contienen declaraciones para realizar la acción específica. La clase de titiritero tiene los siguientes métodos,

puppeteer.clearCustomQueryHandlers () - Borra todos los controladores registrados.

puppeteer.connect (opciones) - Este método se utiliza para conectar titiritero con cualquier navegador existente. Devuelve un objeto de tipo promesa que indica el estado de este proceso asincrónico. Ejemplo: en el siguiente ejemplo, el titiritero se desconecta del navegador actual y se vuelve a conectar,

const titiritero = require('titiritero'); (async () => { const browserChrome = await puppeteer.launch(); // Copiar la referencia del punto final que se volverá a conectar más tarde const endpoint = browserChrome.wsEndpoint(); // Desconectar puppeteer browserChrome.disconnect(); // Usar el punto final para volver a conectar const browserChrome2 = await puppeteer.connect({endpoint}); // Cierra la segunda instancia de Chromium await browserChrome2.close(); })();

puppeteer.createBrowserFetcher ([opciones]) - Crea un objeto de búsqueda del navegador para descargar y administrar las diferentes versiones de los navegadores (Chrome y Firefox).

const browserFetcher = puppeteer.createBrowserFetcher ();

puppeteer.customQueryHandlerNames() – Devuelve un matriz de todos los controladores de consultas personalizados registrados.

puppeteer.defaultArgs ([opciones]) - Devuelve las opciones de configuración predeterminadas del navegador Chrome como una matriz durante el inicio. Además, podemos establecer las opciones configurables de un navegador usando la opción de argumento opcional.

const args = puppeteer.defaultArgs ();

puppeteer.executablePath () - Devuelve la ruta que espera el titiritero para la instancia del navegador incluido. La ruta que no estaría disponible en la descarga fue omitida por la variable de entorno PUPPETEER_SKIP_DOWNLOAD. Además, podemos usar las variables de entorno PUPPETEER_EXECUTABLE_PATH y PUPPETEER_CHROMIUM_REVISION para cambiar la ruta.

const args = puppeteer.executablePath ();

puppeteer.launch ([opciones]) - Este método de clase titiritero se utiliza para iniciar el navegador web. A través del argumento opcional, podemos pasar las diferentes configuraciones del navegador, como producto (nombre del navegador), headless, devtools, etc. Este método devuelve el objeto de promesa, que contiene la referencia del navegador iniciado.

navegador const = espera puppeteer.launch ();

puppeteer.registerCustomQueryHandler (nombre, queryHandler) - Se utiliza para registrar un controlador de consultas personalizado. Aquí, "nombre" proporciona el nombre del controlador de consultas y "queryHandler" define el controlador de consultas personalizado real.

puppeteer.unregisterCustomQueryHandler (nombre) - Se utiliza para anular el registro de cualquier controlador de consultas personalizado.

Referencia: Haga Clic en esta página para leer más sobre los métodos de la Clase Titiritero.

Clase objetivo

La clase objetivo proporciona métodos para trabajar con objetivos. Los métodos utilizados con más frecuencia que están disponibles con la clase de destino se explican en la siguiente sección.

Clase de destino - Métodos:

Los siguientes métodos están disponibles en la clase de objetivos:

  • Target.browser () - Devuelve el objeto del navegador que está vinculado al objetivo.
  • Target.browserContext () - Devuelve un objeto de tipo browserContext que está vinculado al objetivo.
  • Target.createCDPSession () - Crea y devuelve la sesión del protocolo devtool del Chrome, que se adjunta al objetivo.
  • Destino.opener () - Devuelve el objetivo que abre este objetivo. Básicamente, este método se usa para obtener el objetivo principal. Devuelve nulo para el objetivo de nivel superior.
  • Target.page() – Devuelve el objeto de página del objetivo Si el tipo de destino no es una página, devuelve un valor nulo.
  • Tipo de objetivo() - Se usa para obtener el tipo de objetivo. El valor de retorno puede ser cualquiera de las opciones: 'background_page', 'page', 'shared_worker', 'service_worker', 'browser' u 'otro'.
  • Target.url () - Devuelve la URL del objetivo.
  • Target.worker () - Devuelve el objeto webworker. El valor de retorno es nulo si el objetivo no es 'service_worker' ni 'shared_worker'.

Referencia: Haga Clic en esta página para leer más sobre los métodos de la clase Target.

Clase ConsoleMessage

Los objetos de la clase ConsoleMessage se envían por página a través del evento de la consola. Los métodos de uso frecuente de la clase consoleMessage se explican en la siguiente sección.

Clase ConsoleMessage - Métodos:

Los siguientes métodos están disponibles en la clase ConsoleMessage:

  • consoleMessage.args () - Devuelve una matriz de objetos JSHandler. JSHandler evita que el objeto JS vinculado sea recolectado como basura hasta que se elimine el identificador. Se destruye automáticamente cuando se destruye el contexto del navegador principal.
  • consoleMessage.location () - Devuelve un objeto del recurso, que incluye los siguientes parámetros.
  • url: indica la URL del recurso conocido. Si no se conoce, se mantendrá un indefinido .
  • LineNumber: es el número de línea basado en 0 que está disponible en el recurso. Si no está disponible, se mantendrá un indefinido .
  • columnNumber: es el número de columna basado en 0 que está disponible en el recurso. Si no está disponible, se mantendrá un indefinido .
  • consoleMessage.stackTrace () - Devuelve una lista de objetos (cada objeto se refiere a un recurso) que incluye los siguientes parámetros.
  • url: indica la URL del recurso conocido. Si no se conoce, se mantendrá un indefinido .
  • LineNumber: es el número de línea basado en 0 que está disponible en el recurso. Si no está disponible, se mantendrá un indefinido .
  • columnNumber: es el número de columna basado en 0 que está disponible en el recurso. Si no está disponible, se mantendrá un indefinido .
  • consoleMessage.text () - Devuelve el texto de la consola.
  •  consoleMessage.type () - Devuelve la cadena como el tipo de mensaje de consola. El tipo puede ser cualquiera de los valores: log, debug, info, error, warning, dir, dirxml, table, trace, clear, startGroup, startGroupCollapsed, endGroup, assert, profile, profileEnd, count, timeEnd.

Referencia: Haga Clic en esta página para obtener más información sobre los métodos de la clase consoleMessage.

Clase TimeoutError

Al trabajar con diferentes titiriteros, existe la posibilidad de excepciones. Principalmente, si los métodos no pueden cumplir con las solicitudes, arroja errores. La clase TimeoutError se usa para manejar este tipo de excepción.

Ejemplo de clase TimeoutError: para el método page.waitForSelector, si el elemento web no aparece dentro del tiempo especificado, aparecerá el error de tiempo de espera. Consulte el siguiente ejemplo, que muestra un enfoque para manejar el tiempo de espera,

intente { esperar page.waitForSelector(' '); } catch (e) { if (e instanceof puppeteer.errors.TimeoutError) { // Escribir código para manejar el error. } } 

Clase FileChooser

El objeto de clase del selector de archivos se crea utilizando el método página.waitForFileChooser. La clase FileChooser se usa para interactuar con archivos. Los métodos de uso frecuente de la clase FileChooser se explican en la siguiente sección.

Clase FileChooser - Métodos:

Los siguientes métodos están disponibles para la clase FileChooser:

  • fileChooser.accept (file_with_path) - Este método se utiliza para cargar cualquier archivo (para el cual se proporciona la ruta como argumento).
  • fileChooser.cancel () - Este método se utiliza para cancelar el proceso de carga de archivos.
  • fileChooser.isMultiple () - Este método comprueba si fileChooser permite seleccionar varios valores. Devuelve una expresión booleana (verdadera o falsa).

Un ejemplo de clase FileChooser -

const [fileChooser] = await Promise.all([ page.waitForFileChooser(), page.click('#adjuntar-botón'), ]); await fileChooser.accept(['/puppeteer_proj/data/sample_file.pdf']);

Conclusión:

En este tutorial "Puppeteer Class", hemos explicado la clase Puppeteer, la clase Target, la clase MessageConsole y la clase TimeoutError, que incluye los espacios de nombres importantes (si los hay), los eventos (si los hay) y los métodos que se utilizan con frecuencia en las técnicas de raspado web Puppeteer. con ejemplos. En el próximo artículo, explicaremos BrowserContext, Browser y BrowserContext Class.

Deja un comentario