Ottima guida all'apprendimento della classe dei burattinai (Tutorial 7)

Puppeteer, che è una libreria js del nodo open source, può essere utilizzato come strumento di web scraping. La comprensione della riga di comando, Javascript e struttura DOM HTML dovrebbe essere utile per iniziare con questo tutorial burattinaio. Il tutorial Series of Puppeteer è distribuito nella sezione Sub di seguito per ottenere una buona presa su Puppeteer. 

Tutorial burattinaio

burattinaio Esercitazione n. 1: Panoramica del burattinaio

Tutorial burattinaio n. 2: Variabili d'ambiente del burattinaio

burattinaio Esercitazione n. 3: Panoramica su Puppeteer Web Scraping e Puppeteer Test Automation

burattinaio Esercitazione n. 4: Installa Puppeteer

burattinaio Esercitazione n. 5: Progetto Puppeteer di esempio

burattinaio Esercitazione n. 6: Test di automazione dei burattinai

burattinaio Esercitazione n. 7: Classe burattinaio

burattinaio Esercitazione n. 8: Classe browser burattinaio

burattinaio Esercitazione n. 9: Classe della pagina del burattinaio

In questo tutorial "Puppeteer Class", spiegheremo le classi seguenti che includono gli spazi dei nomi importanti (se presenti), gli eventi (se presenti) e i metodi che sono frequentemente utilizzati nelle tecniche di web scraping di Puppeteer. 

Spiegheremo componenti importanti con esempi in questo articolo.  

Classe burattinaio

Concettualmente, la classe è un modello di un oggetto che definisce un insieme di istruzioni (variabili e metodi). Qui, la classe Puppeteer viene definita utilizzando javascript per eseguire diverse azioni per eseguire lo scraping web. Controlliamo l'esempio seguente, il modulo di classe Puppeteer è stato utilizzato per avviare un'istanza web di Chromium.

const burattinaio = require('burattinaio'); (async () => { const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); await pageChrome.goto('https://www.google.com'); // Possiamo scrivere i passaggi qui attendono browserChrome.close(); })();

La classe Puppeteer fornisce anche più spazi dei nomi e metodi, che supportano il processo di web scraping. Gli spazi dei nomi e i metodi utilizzati di frequente sono illustrati nelle sezioni successive.

Classe burattinaio - Spazi dei nomi:

È un contenitore che definisce più identificatori, metodi, variabili, ecc. In javascript. È un modo per raggruppare il codice in modo logico e organizzato. Gli spazi dei nomi di seguito sono forniti dalla classe Puppeteer.

burattinaio.dispositivi: Restituisce un elenco di dispositivi che possono essere utilizzati dal metodo page.emulate (opzioni) per eseguire lo scraping nei dispositivi mobili. 

Esempio: apri e chiudi la pagina web di Google su un dispositivo mobile -

const burattinaio = require('burattinaio'); const samsung = burattinaio.devices['Samsung J5']; (async () => { const browserChrome = await puppeteer.launch(); const pageChrome = await browserChrome.newPage(); await pageChrome.emulate(samsung); await pageChrome.goto('https://www.google.com '); await browserChrome.close(); })();

burattinaio.errors: Mentre si lavora con diversi metodi di burattinaio, c'è la possibilità di eccezioni. Per lo più, se i metodi non sono in grado di soddisfare le richieste, genera errori. Esistono diverse classi definite per gestire gli errori tramite lo spazio dei nomi "puppeteer.errors".

Esempio: per il metodo page.waitForSelector, se l'elemento web non viene visualizzato entro il tempo specificato, verrà visualizzato l'errore di timeout. Si prega di passare attraverso l'esempio seguente, che mostra un approccio per gestire il timeout,

prova { await page.waitForSelector(' '); } catch (err) { if (err instanceof puppeteer.errors.TimeoutError) { // Scrive il codice per gestire l'errore di timeout. } } 

puppeteer.networkCondizioni: Restituisce un elenco di condizioni di rete che possono essere utilizzate nella pagina del metodo. EmulateNetworkConditions (networkConditions). Viene definito l'elenco completo delle condizioni di rete qui.

Esempio: tramite questo esempio di codice, apriremo la pagina Web di Google utilizzando una condizione di rete predefinita.

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

burattinaio.prodotto: Restituisce il nome del browser, che verrà utilizzato per l'automazione (Chrome o Firefox). Il prodotto per il browser è impostato dalla variabile d'ambiente PUPPETEER_PRODUCT o dall'opzione del prodotto disponibile nel metodo della classe Puppeteer Puppeteer.launch ([opzioni]). Il valore predefinito è Chrome.

Riferimento: Clicchi qui per saperne di più sugli spazi dei nomi della classe Puppeteer.

Classe burattinaio - Metodi:

I metodi contengono istruzioni per eseguire l'azione specifica. La classe burattinaio ha i seguenti metodi,

puppeteer.clearCustomQueryHandlers () - Cancella tutti i gestori registrati.

puppeteer.connect (opzioni) - Questo metodo viene utilizzato per connettere il burattinaio a qualsiasi browser esistente. Restituisce un oggetto di tipo promise che indica lo stato di questo processo asincrono. Esempio: nell'esempio seguente, il burattinaio si disconnette dal browser corrente e si riconnette,

const burattinaio = require('burattinaio'); (async() => { const browserChrome = await puppeteer.launch(); // Copia il riferimento all'endpoint che verrà riconnesso in seguito const endpoint = browserChrome.wsEndpoint(); // Disconnetti il ​​burattinaio browserChrome.disconnect(); // Usa l'endpoint da riconnettere const browserChrome2 = await puppeteer.connect({endpoint}); // Chiudi la seconda istanza di Chromium await browserChrome2.close(); })();

puppeteer.createBrowserFetcher ([opzioni]) - Crea un oggetto fetcher del browser per scaricare e gestire le diverse versioni dei browser (Chrome e Firefox).

const browserFetcher = puppeteer.createBrowserFetcher ();

puppeteer.customQueryHandlerNames() – Restituisce un schieramento di tutti i gestori di query personalizzati registrati.

puppeteer.defaultArgs ([opzioni]) - Restituisce le opzioni di configurazione predefinite del browser Chrome come array durante l'avvio. Inoltre, possiamo impostare le opzioni configurabili di un browser utilizzando l'opzione dell'argomento opzionale.

const args = puppeteer.defaultArgs ();

puppeteer.executablePath () - Restituisce il percorso previsto dal burattinaio per l'istanza del browser in bundle. Il percorso che non sarebbe stato disponibile nel download è stato ignorato dalla variabile d'ambiente PUPPETEER_SKIP_DOWNLOAD. Inoltre, possiamo usare le variabili d'ambiente PUPPETEER_EXECUTABLE_PATH e PUPPETEER_CHROMIUM_REVISION per cambiare il percorso.

const args = puppeteer.executablePath ();

Puppeteer.launch ([opzioni]) - Questo metodo di classe burattinaio viene utilizzato per avviare il browser web. Attraverso l'argomento opzionale, possiamo passare le diverse configurazioni del browser, come product (nome browser), headless, devtools, ecc. Questo metodo restituisce l'oggetto promise, che contiene il riferimento del browser avviato.

const browser = attende puppeteer.launch ();

puppeteer.registerCustomQueryHandler (nome, queryHandler) - Viene utilizzato per registrare un gestore di query personalizzato. Qui "name" fornisce il nome del gestore di query e "queryHandler" definisce il gestore di query personalizzato effettivo.

puppeteer.unregisterCustomQueryHandler (nome) - Viene utilizzato per annullare la registrazione di qualsiasi gestore di query personalizzato.

Riferimento: Clicchi qui per saperne di più sui metodi della classe Puppeteer.

Classe target

La classe target fornisce metodi per lavorare con i target. I metodi usati più di frequente che sono disponibili con la classe di destinazione sono spiegati nella sezione successiva.

Classe target - Metodi:

I metodi seguenti sono disponibili nella classe di destinazione:

  • Target.browser () - Restituisce l'oggetto browser che è collegato alla destinazione.
  • Target.browserContext () - Restituisce un oggetto di tipo browserContext che è collegato alla destinazione.
  • Target.createCDPSession () - Crea e restituisce la sessione del protocollo devtool del chrome, che è collegata alla destinazione.
  • Target.opener () - Restituisce il target che apre questo target. Fondamentalmente, questo metodo viene utilizzato per ottenere l'obiettivo principale. Restituisce null per l'obiettivo di primo livello.
  • Target.page() – Restituisce il oggetto della pagina del bersaglio. Se il tipo di destinazione non è una pagina, restituisce un valore nullo.
  • Target.type () - Viene utilizzato per ottenere il tipo di bersaglio. Il valore restituito può essere una delle opzioni: "background_page", "page", "shared_worker", "service_worker", "browser" o "other".
  • URL di destinazione() - Restituisce l'URL del target.
  • Target.worker () - Restituisce l'oggetto webworker. Il valore restituito è nullo se la destinazione non è né "service_worker" né "shared_worker".

Riferimento: Clicchi qui per saperne di più sui metodi della classe Target.

Classe ConsoleMessage

Gli oggetti della classe ConsoleMessage vengono inviati per pagina tramite l'evento della console. I metodi usati di frequente della classe consoleMessage sono spiegati nella sezione successiva.

Classe ConsoleMessage - Metodi:

I metodi seguenti sono disponibili nella classe ConsoleMessage:

  • consoleMessage.args () - Restituisce un array di oggetti JSHandler. JSHandler impedisce che l'oggetto JS collegato venga sottoposto a garbage collection fino a quando l'handle non viene eliminato. Viene automaticamente distrutto quando il contesto del browser principale viene distrutto.
  • consoleMessage.location () - Restituisce un oggetto della risorsa, che include i parametri seguenti.
  • url - Indica l'URL della risorsa nota. Se non è noto, manterrà un indefinito valore.
  • LineNumber: è il numero di riga in base 0 disponibile nella risorsa. Se non disponibile, manterrà un indefinito valore.
  • columNumber: è il numero di colonna in base 0 disponibile nella risorsa. Se non disponibile, manterrà un indefinito valore.
  • consoleMessage.stackTrace () - Restituisce un elenco di oggetti (ogni oggetto fa riferimento a una risorsa) che include i seguenti parametri.
  • url - Indica l'URL della risorsa nota. Se non è noto, manterrà un indefinito valore.
  • LineNumber: è il numero di riga in base 0 disponibile nella risorsa. Se non disponibile, manterrà un indefinito valore.
  • columNumber: è il numero di colonna in base 0 disponibile nella risorsa. Se non disponibile, manterrà un indefinito valore.
  • consoleMessage.text () - Restituisce il testo della console.
  •  consoleMessage.type () - Restituisce la stringa come tipo di messaggio della console. Il tipo può essere uno dei valori: log, debug, info, error, warning, dir, dirxml, table, trace, clear, startGroup, startGroupCollapsed, endGroup, assert, profile, profileEnd, count, timeEnd.

Riferimento: Clicchi qui per saperne di più sui metodi della classe consoleMessage.

Classe TimeoutError

Mentre si lavora con diversi burattinai, c'è la possibilità di eccezioni. Per lo più, se i metodi non sono in grado di soddisfare le richieste, genera errori. La classe TimeoutError viene utilizzata per gestire questo tipo di eccezione.

Esempio di classe TimeoutError: per il metodo page.waitForSelector, se l'elemento web non viene visualizzato entro il tempo specificato, verrà visualizzato l'errore di timeout. Si prega di passare attraverso l'esempio seguente, che mostra un approccio per gestire il timeout,

prova { await page.waitForSelector(' '); } catch (e) { if (e instanceof puppeteer.errors.TimeoutError) { // Scrive il codice per gestire l'errore. } } 

Classe FileChooser

L'oggetto classe di selezione file viene creato utilizzando il metodo page.waitForFileChooser. La classe FileChooser viene utilizzata per interagire con i file. I metodi usati di frequente della classe FileChooser sono spiegati nella sezione successiva.

Classe FileChooser - Metodi:

I metodi seguenti sono disponibili per la classe FileChooser:

  • fileChooser.accept (file_with_path) - Questo metodo viene utilizzato per caricare qualsiasi file (per il quale viene fornito il percorso come argomento).
  • fileChooser.cancel () - Questo metodo viene utilizzato per annullare il processo di caricamento del file.
  • fileChooser.isMultiple () - Questo metodo controlla se fileChooser consente di selezionare più valori. Restituisce un'espressione booleana (vero o falso).

Un esempio di classe FileChooser -

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

Conclusione:

In questo tutorial "Puppeteer Class", abbiamo spiegato la classe Puppeteer, la classe Target, la classe MessageConsole e la classe TimeoutError che include gli spazi dei nomi importanti (se presenti), gli eventi (se presenti) e i metodi che sono frequentemente utilizzati nelle tecniche di web scraping di Puppeteer con esempi. Nel prossimo articolo spiegheremo BrowserContext, Browser e BrowserContext Class.

Lascia un tuo commento