Geweldige leergids van Puppeteer Class (Tutorial 7)

Puppeteer, een open-source node js-bibliotheek, kan worden gebruikt als een webscraping-tool. Inzicht in de opdrachtregel, Javascript en HTML DOM-structuur zou goed moeten zijn om te beginnen met deze poppenspeler-tutorial. De tutorial Series of Puppeteer is verdeeld over de onderstaande subsectie om Puppeteer goed in de hand te houden. 

Puppeteer-zelfstudie

poppenspeler Zelfstudie #1: Poppenspeler Overzicht

Poppenspeler-zelfstudie #2: Poppenspeler omgevingsvariabelen

poppenspeler Zelfstudie #3: Puppeteer Web Scraping en Puppeteer Test Automation Overzicht

poppenspeler Zelfstudie #4: Installeer Puppeteer

poppenspeler Zelfstudie #5: Voorbeeld van een poppenspelerproject

poppenspeler Zelfstudie #6: Testen van automatisering van poppenspelers

poppenspeler Zelfstudie #7: Poppenspelersklasse

poppenspeler Zelfstudie #8: Poppenspeler Browser-klasse

poppenspeler Tutorial #9: Poppenspelerpaginaklas

In deze "Puppeteer Class" tutorial, zullen we de onderstaande klassen uitleggen die de belangrijke namespaces (indien aanwezig), events (indien aanwezig), en methodes bevatten die vaak gebruikt worden in Puppeteer web scraping technieken. 

In dit artikel zullen we belangrijke componenten met voorbeelden uitleggen.  

Poppenspelersklasse

Conceptueel is de klasse een blauwdruk van een object dat een reeks instructies (variabelen en methoden) definieert. Hier wordt de Puppeteer-klasse gedefinieerd met behulp van javascript om verschillende acties uit te voeren om webscraping uit te voeren. Laten we het onderstaande voorbeeld eens bekijken, de Puppeteer class-module is gebruikt om een ​​Chromium-webinstantie te starten.

const poppenspeler = vereisen('poppenspeler'); (async () => { const browserChrome = wacht puppeteer.launch(); const pageChrome = wacht browserChrome.newPage(); wacht pageChrome.goto('https://www.google.com'); // We kunnen schrijven stappen hier wachten op browserChrome.close();})();

Puppeteer-klasse biedt ook meerdere naamruimten en methoden, die het webschraapproces ondersteunen. De vaak gebruikte naamruimten en methoden worden in de volgende secties uitgelegd.

Poppenspelersklasse - Naamruimten:

Het is een container die meerdere identifiers, methoden, variabelen, enz. In javascript definieert. Het is een manier om de code op een logische en georganiseerde manier te groeperen. Onderstaande naamruimten worden geleverd door de klasse Puppeteer.

poppenspeler. apparaten: Het retourneert een lijst met apparaten die door de methode kunnen worden gebruikt page.emulate (opties) om scraping uit te voeren op mobiele apparaten. 

Voorbeeld - Google-webpagina openen en sluiten op een mobiel apparaat -

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

poppenspeler.fouten: Bij het werken met verschillende poppenspelermethodes bestaat de kans op uitzonderingen. Meestal, als de methoden niet aan de verzoeken kunnen voldoen, worden er fouten gegenereerd. Er zijn verschillende klassen gedefinieerd om fouten af ​​te handelen via de naamruimte 'puppeteer.errors'.

Voorbeeld - voor methode page.waitForSelector, als het webelement niet binnen de opgegeven tijd verschijnt, zal de time-outfout verschijnen. Ga door het onderstaande voorbeeld, dat een aanpak toont om time-out af te handelen,

probeer { wait page.waitForSelector(' '); } catch (err) {if (err instanceof puppeteer.errors.TimeoutError) { // Schrijf code om de time-outfout af te handelen. } } 

poppenspeler.netwerk Voorwaarden: Het retourneert een lijst met netwerkcondities die kunnen worden gebruikt op de methode page.emulateNetworkConditions (networkConditions). De volledige lijst met netwerkvoorwaarden is gedefinieerd hier.

Voorbeeld - Via dit codevoorbeeld openen we de Google-webpagina met behulp van een vooraf gedefinieerde netwerkvoorwaarde.

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

poppenspeler.product: Het retourneert de naam van de browser, die zal worden gebruikt voor automatisering (Chrome of Firefox). Het product voor de browser wordt ingesteld door de omgevingsvariabele PUPPETEER_PRODUCT of de productoptie die beschikbaar is in de poppenspelersklassenmethode puppeteer.launch ([opties])​ De standaardwaarde is Chrome.

Referentie: Klik hier voor meer informatie over Puppeteer Class-naamruimten.

Poppenspelersklas - Methoden:

Methoden bevatten instructies om de specifieke actie uit te voeren. De poppenspelersklasse heeft onderstaande methoden,

poppenspeler.clearCustomQueryHandlers () - Het wist alle geregistreerde handlers.

puppeteer.connect (opties) - Deze methode wordt gebruikt om poppenspeler te verbinden met bestaande browsers. Het retourneert een object van het type belofte dat de status van dit asynchrone proces aangeeft. Voorbeeld - In het onderstaande voorbeeld verbreekt de poppenspeler de verbinding met de huidige browser en maakt opnieuw verbinding,

const poppenspeler = vereisen('poppenspeler'); (async () => { const browserChrome = wacht puppeteer.launch(); // Kopieer de eindpuntreferentie die later opnieuw wordt verbonden const endpoint = browserChrome.wsEndpoint(); // Koppel puppeteer browserChrome.disconnect(); // Gebruik het eindpunt om opnieuw verbinding te maken const browserChrome2 = wacht puppeteer.connect({endpoint}); // Sluit tweede instantie van Chromium af, wacht browserChrome2.close(); })();

puppeteer.createBrowserFetcher ([opties]) - Het maakt een browser-ophaalobject om de verschillende versies van browsers (Chrome en Firefox) te downloaden en te beheren.

const browserFetcher = puppeteer.createBrowserFetcher ();

puppeteer.customQueryHandlerNames() – Het retourneert een reeks van alle geregistreerde aangepaste query-handlers.

puppeteer.defaultArgs ([opties]) - Het retourneert de standaard configuratie-opties van de Chrome-browser als een array tijdens het starten. We kunnen ook de configureerbare opties van een browser instellen met behulp van de optionele argumentoptie.

const args = puppeteer.defaultArgs ();

poppenspeler.executablePath () - Het retourneert het pad dat wordt verwacht door de poppenspeler voor de gebundelde browserinstantie. Het pad dat niet beschikbaar zou zijn in de download, is overgeslagen door de omgevingsvariabele PUPPETEER_SKIP_DOWNLOAD. We kunnen ook de omgevingsvariabelen PUPPETEER_EXECUTABLE_PATH en PUPPETEER_CHROMIUM_REVISION gebruiken om het pad te wijzigen.

const args = poppenspeler.executablePath ();

puppeteer.launch ([opties]) - Deze poppenspelersklassemethode wordt gebruikt om de webbrowser te starten. Via het optionele argument kunnen we de verschillende configuraties van de browser doorgeven, zoals product (browsernaam), headless, devtools, enz. Deze methode retourneert het belofte-object, dat de referentie van de gestarte browser bevat.

const browser = wachten op puppeteer.launch ();

puppeteer.registerCustomQueryHandler (naam, queryHandler) - Het wordt gebruikt om een ​​aangepaste handler voor zoekopdrachten te registreren. Hier geeft "naam" de naam van de query-handler, en "queryHandler" definieert de daadwerkelijke aangepaste query-handler.

puppeteer.unregisterCustomQueryHandler (naam) - Het wordt gebruikt om de registratie van een aangepaste query-handler ongedaan te maken.

Referentie: Klik hier om meer te lezen over Puppeteer Class-methoden.

Doelgroep

De doelklasse biedt methoden om met doelen te werken. De meest gebruikte methoden die beschikbaar zijn met de doelklasse, worden in de volgende sectie uitgelegd.

Doelklasse - Methoden:

Onderstaande methoden zijn beschikbaar in de klasse doelen -

  • Target.browser () - Het retourneert het browserobject dat is gekoppeld aan het doel.
  • Target.browserContext () - Het retourneert een object van het type browserContext dat is gekoppeld aan het doel.
  • Target.createCDPSession () - Het maakt en retourneert de devtool-protocolsessie van de chrome, die aan het doel is gekoppeld.
  • Target.opener () - Het geeft het doel terug dat dit doel opent. In principe wordt deze methode gebruikt om het bovenliggende doelwit te krijgen. Het retourneert null voor het doel op het hoogste niveau.
  • Target.page() - Het retourneert de pagina-object van het doel. Als het type doel geen pagina is, wordt een null-waarde geretourneerd.
  • Target.type () - Het wordt gebruikt om het type doelwit te achterhalen. De geretourneerde waarde kan een van de volgende opties zijn: 'background_page', 'page', 'shared_worker', 'service_worker', 'browser' of 'other'.
  • Target.url () - Het geeft de url van het doel terug.
  • Target.worker () - Het retourneert het webworker-object. De geretourneerde waarde is null als het doel niet 'service_worker' noch 'shared_worker' is.

Referentie: Klik hier om meer te lezen over Target class-methoden.

ConsoleMessage-klasse

De klasseobjecten van ConsoleMessage worden per pagina verzonden via de consolegebeurtenis. De veelgebruikte methoden van de klasse consoleMessage worden in de volgende sectie uitgelegd.

ConsoleMessage Class - Methoden:

De onderstaande methoden zijn beschikbaar in de klasse ConsoleMessage -

  • consoleMessage.args () - Het retourneert een array van JSHandler-objecten. De JSHandler voorkomt dat het gekoppelde JS-object wordt verzameld als afval totdat het handvat is verwijderd. Het wordt automatisch vernietigd wanneer de bovenliggende browsercontext wordt vernietigd.
  • consoleMessage.location () - Het retourneert een object van de bron, dat de onderstaande parameters bevat.
  • url - Het geeft de URL van de bekende bron aan. Indien niet bekend, blijft het behouden een ongedefinieerd waarde.
  • LineNumber - Het is het op 0 gebaseerde regelnummer dat beschikbaar is in de resource. Als het niet beschikbaar is, blijft het behouden een ongedefinieerd waarde.
  • columNumber - Het is het op 0 gebaseerde kolomnummer dat beschikbaar is in de resource. Als het niet beschikbaar is, blijft het behouden een ongedefinieerd waarde.
  • consoleMessage.stackTrace () - Het geeft een lijst met objecten terug (elk object verwijst naar een bron) die onderstaande parameters bevat.
  • url - Het geeft de URL van de bekende bron aan. Indien niet bekend, blijft het behouden een ongedefinieerd waarde.
  • LineNumber - Het is het op 0 gebaseerde regelnummer dat beschikbaar is in de resource. Als het niet beschikbaar is, blijft het behouden een ongedefinieerd waarde.
  • columNumber - Het is het op 0 gebaseerde kolomnummer dat beschikbaar is in de resource. Als het niet beschikbaar is, blijft het behouden een ongedefinieerd waarde.
  • consoleMessage.text () - Het geeft de tekst van de console terug.
  •  consoleMessage.type () - Het retourneert de tekenreeks als het type consolebericht. Het type kan een van de volgende waarden zijn: log, debug, info, error, waarschuwing, dir, dirxml, table, trace, clear, startGroup, startGroupCollapsed, endGroup, assert, profile, profileEnd, count, timeEnd.

Referentie: Klik hier voor meer informatie over consoleMessage-klassemethoden.

TimeoutError-klasse

Bij het werken met verschillende poppenspelers is er kans op uitzonderingen. Meestal, als de methoden niet aan de verzoeken kunnen voldoen, worden er fouten gegenereerd. De klasse TimeoutError wordt gebruikt om dit soort uitzonderingen af ​​te handelen.

Voorbeeld van TimeoutError-klasse - voor methode page.waitForSelector, als het webelement niet binnen de opgegeven tijd verschijnt, verschijnt de time-outfout. Bekijk het onderstaande voorbeeld, dat een aanpak toont om time-out af te handelen,

probeer { wait page.waitForSelector(' '); } catch (e) { if (e instanceof puppeteer.errors.TimeoutError) { // Schrijf code om de fout af te handelen. } } 

FileChooser-klasse

Het klasseobject van de bestandskiezer wordt gemaakt met de methode pagina.waitForFileChooser​ De klasse FileChooser wordt gebruikt voor interactie met bestanden. De veelgebruikte methoden van de klasse FileChooser worden in de volgende sectie uitgelegd.

FileChooser-klasse - Methoden:

De onderstaande methoden zijn beschikbaar voor de klasse FileChooser:

  • fileChooser.accept (file_with_path) - Deze methode wordt gebruikt om elk bestand te uploaden (waarvoor pad als argument wordt opgegeven).
  • fileChooser.cancel () - Deze methode wordt gebruikt om het uploaden van bestanden te annuleren.
  • fileChooser.isMultiple () - Deze methode controleert of de fileChooser het mogelijk maakt om meerdere waarden te selecteren. Het retourneert een booleaanse uitdrukking (true of false).

Een voorbeeld van de FileChooser-klasse -

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

Conclusie:

In deze "Puppeteer Class" tutorial hebben we de Puppeteer class, Target class, MessageConsole class en TimeoutError class uitgelegd, die de belangrijke namespaces (indien aanwezig), events (indien aanwezig) en methoden die vaak worden gebruikt in Puppeteer web scraping-technieken bevatten. met voorbeelden. In het volgende artikel zullen we BrowserContext, Browser en BrowserContext Class uitleggen.

Laat een bericht achter