Toller Lernleitfaden der Puppenspielerklasse (Tutorial 7)


Puppenspieler, eine Open-Source-Knoten-js-Bibliothek, kann als Web-Scraping-Tool verwendet werden. Das Verständnis der Befehlszeilen-, Javascript- und HTML-DOM-Struktur sollte gut sein, um mit diesem Puppenspiel-Tutorial zu beginnen. Das Tutorial zur Serie der Puppenspieler ist auf den folgenden Unterabschnitt verteilt, um einen guten Überblick über Puppenspieler zu erhalten. 

Puppenspieler Tutorial

Puppenspieler Lernprogramm Nr. 1: Puppenspieler Übersicht

Puppenspieler-Tutorial Nr. 2: Puppenspieler-Umgebungsvariablen

Puppenspieler Lernprogramm Nr. 3: Übersicht über Puppenspieler-Web-Scraping und Puppenspieler-Testautomatisierung

Puppenspieler Lernprogramm Nr. 4: Installieren Sie Puppenspieler

Puppenspieler Lernprogramm Nr. 5: Beispiel eines Puppenspielerprojekts

Puppenspieler Lernprogramm Nr. 6: Puppenspieler-Automatisierungstests

Puppenspieler Lernprogramm Nr. 7: Puppenspieler Klasse

Puppenspieler Lernprogramm Nr. 8: Puppenspieler-Browser-Klasse

Puppenspieler Lernprogramm Nr. 9: Puppenspieler-Seitenklasse

In diesem Tutorial „Puppenspieler-Klasse“ werden die folgenden Klassen erläutert, die wichtige Namespaces (falls vorhanden), Ereignisse (falls vorhanden) und Methoden enthalten, die häufig in Puppeteer-Web-Scraping-Techniken verwendet werden. 

In diesem Artikel werden wichtige Komponenten anhand von Beispielen erläutert.  

Puppenspieler Klasse

Konzeptionell ist die Klasse eine Blaupause eines Objekts, die eine Reihe von Anweisungen (Variablen und Methoden) definiert. Hier wird die Puppenspieler-Klasse mithilfe von Javascript definiert, um verschiedene Aktionen zum Durchführen von Web-Scraping auszuführen. Schauen wir uns das folgende Beispiel an: Das Puppeteer-Klassenmodul wurde zum Starten einer Chromium-Webinstanz verwendet.

const puppeteer = require('puppeteer'); (async () => { const browserChrome = warte auf puppeteer.launch(); const pageChrome = warte auf browserChrome.newPage(); warte auf pageChrome.goto('https://www.google.com'); // Wir können schreiben Schritte hier warten auf browserChrome.close(); })();

Die Puppenspieler-Klasse bietet auch mehrere Namespaces und Methoden, die den Web-Scraping-Prozess unterstützen. Die häufig verwendeten Namespaces und Methoden werden in den nächsten Abschnitten erläutert.

Puppenspieler-Klasse - Namespaces:

Es ist ein Container, der mehrere Bezeichner, Methoden, Variablen usw. in Javascript definiert. Auf diese Weise können Sie den Code logisch und organisiert gruppieren. Die folgenden Namespaces werden von der Puppeteer-Klasse bereitgestellt.

pupeteer.devices: Es gibt eine Liste der Geräte zurück, die von der Methode verwendet werden können page.emulate (Optionen) Scraping in mobilen Geräten durchführen. 

Beispiel - Öffnen und Schließen der Google-Webseite auf einem mobilen Gerät -

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

Puppenspieler.Fehler: Bei der Arbeit mit verschiedenen Puppenspielermethoden besteht die Möglichkeit von Ausnahmen. Wenn die Methoden die Anforderungen nicht erfüllen können, werden meistens Fehler ausgegeben. Es sind verschiedene Klassen definiert, um Fehler über den Namespace 'puppeteer.errors' zu behandeln.

Beispiel - Wenn das Webelement für die Methode page.waitForSelector nicht innerhalb der angegebenen Zeit angezeigt wird, wird der Timeout-Fehler angezeigt. Bitte gehen Sie das folgende Beispiel durch, das einen Ansatz zur Behandlung von Zeitüberschreitungen zeigt.

try { await page.waitForSelector(' '); } catch (err) { if (err instanceof puppeteer.errors.TimeoutError) { // Code zur Behandlung des Zeitüberschreitungsfehlers schreiben. } } 

pupeteer.networkBedingungen: Es gibt eine Liste der Netzwerkbedingungen zurück, die auf der Methode page.emulateNetworkConditions (networkConditions) verwendet werden können. Die vollständige Liste der Netzwerkbedingungen ist definiert hier.

Beispiel - In diesem Codebeispiel öffnen wir die Google-Webseite unter Verwendung einer vordefinierten Netzwerkbedingung.

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

Puppenspieler.Produkt: Es gibt den Namen des Browsers zurück, der für die Automatisierung verwendet wird (Chrome oder Firefox). Das Produkt für den Browser wird entweder durch die Umgebungsvariable PUPPETEER_PRODUCT oder die in der Puppenspieler-Klassenmethode verfügbare Produktoption festgelegt puppeteer.launch ([Optionen]). Der Standardwert ist Chrome.

Referenz: Klicken Sie hier Erfahren Sie mehr über Namespaces der Puppenspieler-Klasse.

Puppenspieler Klasse - Methoden:

Methoden enthalten Anweisungen zum Ausführen der spezifischen Aktion. Die Puppenspieler-Klasse hat folgende Methoden:

Puppenspieler.clearCustomQueryHandlers () - Es werden alle registrierten Handler gelöscht.

pupeteer.connect (Optionen) - Diese Methode wird verwendet, um Puppenspieler mit vorhandenen Browsern zu verbinden. Es gibt ein Objekt vom Typ Versprechen zurück, das den Status dieses asynchronen Prozesses angibt. Beispiel - Im folgenden Beispiel trennt der Puppenspieler die Verbindung zum aktuellen Browser und stellt die Verbindung wieder her.

const puppeteer = require('puppeteer'); (async () => { const browserChrome = await puppeteer.launch(); // Kopiere die Endpunktreferenz, die später wieder verbunden wird const endpoint = browserChrome.wsEndpoint(); // Trenne puppeteer browserChrome.disconnect(); // Verwenden der Endpunkt zum Wiederverbinden const browserChrome2 = await puppeteer.connect({endpoint}); // Zweite Instanz von Chromium schließen await browserChrome2.close(); })();

puppeteer.createBrowserFetcher ([Optionen]) - Es wird ein Browser-Abrufobjekt erstellt, um die verschiedenen Browserversionen (Chrome und Firefox) herunterzuladen und zu verwalten.

const browserFetcher = puppeteer.createBrowserFetcher ();

puppeteer.customQueryHandlerNames() – Es gibt ein zurück Array aller registrierten benutzerdefinierten Abfragehandler.

pupeteer.defaultArgs ([Optionen]) - Beim Start werden die Standardkonfigurationsoptionen des Chrome-Browsers als Array zurückgegeben. Außerdem können wir die konfigurierbaren Optionen eines Browsers mithilfe der optionalen Argumentoption festlegen.

const args = puppeteer.defaultArgs ();

pupeteer.executablePath () - Es gibt den Pfad zurück, den der Puppenspieler für die gebündelte Browserinstanz erwartet. Der Pfad, der im Download nicht verfügbar wäre, wurde von der Umgebungsvariablen PUPPETEER_SKIP_DOWNLOAD übersprungen. Wir können auch die Umgebungsvariablen PUPPETEER_EXECUTABLE_PATH und PUPPETEER_CHROMIUM_REVISION verwenden, um den Pfad zu ändern.

const args = puppeteer.executablePath ();

pupeteer.launch ([Optionen]) - Diese Puppenspieler-Klassenmethode wird zum Starten des Webbrowsers verwendet. Über das optionale Argument können wir die verschiedenen Konfigurationen des Browsers übergeben, z. B. Produkt (Browsername), Headless, Devtools usw. Diese Methode gibt das Versprechen-Objekt zurück, das die Referenz des gestarteten Browsers enthält.

const browser = warte auf puppeteer.launch ();

puppeteer.registerCustomQueryHandler (name, queryHandler) - Es wird verwendet, um einen benutzerdefinierten Abfrage-Handler zu registrieren. Hier gibt "name" den Namen des Abfragehandlers an, und "queryHandler" definiert den tatsächlichen benutzerdefinierten Abfragehandler.

Puppenspieler.unregisterCustomQueryHandler (Name) - Es wird verwendet, um die Registrierung eines benutzerdefinierten Abfragehandlers aufzuheben.

Referenz: Klicken Sie hier um mehr über Puppenspieler-Klassenmethoden zu erfahren.

Zielklasse

Die Zielklasse bietet Methoden zum Arbeiten mit Zielen. Die am häufigsten verwendeten Methoden, die für die Zielklasse verfügbar sind, werden im nächsten Abschnitt erläutert.

Zielklasse - Methoden:

Die folgenden Methoden sind in der Zielklasse verfügbar -

  • Target.browser () - Es gibt das Browserobjekt zurück, das mit dem Ziel verknüpft ist.
  • Target.browserContext () - Es wird ein Objekt vom Typ browserContext zurückgegeben, das mit dem Ziel verknüpft ist.
  • Target.createCDPSession () - Es erstellt und gibt die devtool-Protokollsitzung des Chrome zurück, die an das Ziel angehängt ist.
  • Target.opener () - Es gibt das Ziel zurück, das dieses Ziel öffnet. Grundsätzlich wird diese Methode verwendet, um das übergeordnete Ziel abzurufen. Für das Ziel der obersten Ebene wird null zurückgegeben.
  • Target.page() – Gibt die zurück Seitenobjekt des Ziels. Wenn der Typ des Ziels keine Seite ist, wird ein Nullwert zurückgegeben.
  • Target.type () - Es wird verwendet, um den Typ des Ziels zu ermitteln. Der Rückgabewert kann eine der Optionen sein - 'background_page', 'page', 'shared_worker', 'service_worker', 'browser' oder 'other'.
  • Ziel-URL() - Es gibt die URL des Ziels zurück.
  • Target.worker () - Es gibt das Webworker-Objekt zurück. Der Rückgabewert ist null, wenn das Ziel weder 'service_worker' noch 'shared_worker' ist.

Referenz: Klicken Sie hier Weitere Informationen zu Zielklassenmethoden.

ConsoleMessage-Klasse

Die ConsoleMessage-Klassenobjekte werden seitenweise über das Konsolenereignis verteilt. Die häufig verwendeten Methoden der consoleMessage-Klasse werden im nächsten Abschnitt erläutert.

ConsoleMessage-Klasse - Methoden:

Die folgenden Methoden sind in der ConsoleMessage-Klasse verfügbar -

  • consoleMessage.args () - Es wird ein Array von JSHandler-Objekten zurückgegeben. Der JSHandler verhindert, dass das verknüpfte JS-Objekt bis zur Entsorgung des Handles durch Müll gesammelt wird. Es wird automatisch zerstört, wenn der übergeordnete Browserkontext zerstört wird.
  • consoleMessage.location () - Es gibt ein Objekt der Ressource zurück, das die folgenden Parameter enthält.
  • url - Gibt die URL der bekannten Ressource an. Wenn nicht bekannt, wird es behalten eine undefinierte Wert.
  • LineNumber - Dies ist die 0-basierte Zeilennummer, die in der Ressource verfügbar ist. Wenn nicht verfügbar, wird es behalten eine undefinierte Wert.
  • columNumber - Dies ist die 0-basierte Spaltennummer, die in der Ressource verfügbar ist. Wenn nicht verfügbar, wird es behalten eine undefinierte Wert.
  • consoleMessage.stackTrace () - Es wird eine Liste von Objekten zurückgegeben (jedes Objekt verweist auf eine Ressource), die die folgenden Parameter enthält.
  • url - Gibt die URL der bekannten Ressource an. Wenn nicht bekannt, wird es behalten eine undefinierte Wert.
  • LineNumber - Dies ist die 0-basierte Zeilennummer, die in der Ressource verfügbar ist. Wenn nicht verfügbar, wird es behalten eine undefinierte Wert.
  • columNumber - Dies ist die 0-basierte Spaltennummer, die in der Ressource verfügbar ist. Wenn nicht verfügbar, wird es behalten eine undefinierte Wert.
  • consoleMessage.text () - Es gibt den Text der Konsole zurück.
  •  consoleMessage.type () - Es gibt die Zeichenfolge als Typ der Konsolennachricht zurück. Der Typ kann einer der folgenden Werte sein: log, debug, info, error, warning, dir, dirxml, table, trace, clear, startGroup, startGroupCollapsed, endGroup, assert, profile, profileEnd, count, timeEnd.

Referenz: Klicken Sie hier Weitere Informationen zu consoleMessage-Klassenmethoden.

TimeoutError-Klasse

Bei der Arbeit mit verschiedenen Puppenspielern besteht die Möglichkeit von Ausnahmen. Wenn die Methoden die Anforderungen nicht erfüllen können, werden meistens Fehler ausgegeben. Die TimeoutError-Klasse wird verwendet, um diese Art von Ausnahme zu behandeln.

Beispiel für die TimeoutError-Klasse - Wenn das Webelement für die Methode page.waitForSelector nicht innerhalb der angegebenen Zeit angezeigt wird, wird der Timeout-Fehler angezeigt. Bitte gehen Sie das folgende Beispiel durch, das einen Ansatz zur Behandlung von Zeitüberschreitungen zeigt.

try { await page.waitForSelector(' '); } catch (e) { if (e instanceof puppeteer.errors.TimeoutError) { // Code schreiben, um den Fehler zu behandeln. } } 

FileChooser-Klasse

Das Klassenauswahlobjekt der Dateiauswahl wird mit der Methode erstellt page.waitForFileChooser. Die FileChooser-Klasse wird zur Interaktion mit Dateien verwendet. Die häufig verwendeten Methoden der FileChooser-Klasse werden im nächsten Abschnitt erläutert.

FileChooser-Klasse - Methoden:

Die folgenden Methoden stehen für die FileChooser-Klasse zur Verfügung:

  • fileChooser.accept (file_with_path) - Mit dieser Methode wird eine Datei hochgeladen (für die der Pfad als Argument angegeben ist).
  • fileChooser.cancel () - Diese Methode wird verwendet, um den Datei-Upload-Vorgang abzubrechen.
  • fileChooser.isMultiple () - Diese Methode prüft, ob der fileChooser die Auswahl mehrerer Werte zulässt. Es gibt einen booleschen Ausdruck zurück (wahr oder falsch).

Ein Beispiel für die FileChooser-Klasse -

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

Fazit:

In diesem Tutorial „Puppeteer-Klasse“ haben wir die Puppeteer-Klasse, die Zielklasse, die MessageConsole-Klasse und die TimeoutError-Klasse erläutert, die wichtige Namespaces (falls vorhanden), Ereignisse (falls vorhanden) und Methoden enthalten, die häufig in Puppeteer-Web-Scraping-Techniken verwendet werden mit Beispielen. Im nächsten Artikel werden BrowserContext, Browser und BrowserContext-Klasse erläutert.

K. Mondal

Hallo, ich bin K. Mondal, ich bin mit einer führenden Organisation verbunden. Ich habe mehr als 12 Jahre Berufserfahrung in verschiedenen Bereichen, zB Anwendungsentwicklung, Automatisierungstests, IT-Berater. Ich interessiere mich sehr für das Erlernen verschiedener Technologien. Ich bin hier, um meinen Anspruch zu erfüllen und trage derzeit als Autor und Website-Entwickler bei LambdaGeeks bei. Verbinden Sie sich mit LinkedIn – https://www.linkedin.com/in/kumaresh-mondal/

Neueste Beiträge