In diesem Puppeteer- User-Agent-Leitfaden erfahren Sie:
- Web-Scraping
- Wie der Standard-User-Agent in
Puppeteeraussieht - Wie Sie den Standard-Headless-User-Agent von Chrome überschreiben
- Wie Sie die User-Agent-Rotation in
Puppeteerimplementieren - Wie Sie
Puppeteer Extraverwenden, um den User Agent zu anonymisieren
Lassen Sie uns loslegen!
Warum Sie einen benutzerdefinierten User-Agent festlegen müssen
Der User-Agent-Header ist eine Zeichenfolge, die der Client festlegt, um sich gegenüber einem Server zu identifizieren, wenn er diesen über eine HTTP-Anfrage kontaktiert. Er enthält in der Regel Informationen über den Rechner und/oder die Anwendung, von der die Anfrage stammt. Dieser Header wird von Webbrowsern, HTTP-Clients oder jeder Software festgelegt, die Webanfragen ausführt.
Nachfolgend finden Sie ein Beispiel für die von Chrome bei der Anforderung von Webseiten festgelegte User-Agent-Zeichenfolge:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
Der oben genannte User-Agent-String besteht aus den folgenden Komponenten:
Mozilla/5.0: Ursprünglich zur Angabe der Kompatibilität mit Mozilla-Browsern verwendet, wird dieses Präfix nun für eine breitere Kompatibilität verwendet.Windows NT 10.0; Win64; x64: Gibt das Betriebssystem (Windows NT 10.0), die Plattform (Win64) und die Systemarchitektur (x64) an.AppleWebKit/537.36: Bezieht sich auf die Browser-Engine, die Chrome verwendet.(KHTML, like Gecko): Gibt die Kompatibilität mit den Layout-Engines KHTML und Gecko an.Chrome/127.0.0.0: Gibt den Namen und die Version des Browsers an.Safari/537.36: Zeigt die Kompatibilität mit Safari an.
Im Wesentlichen kann die User-Agent-Zeichenfolge Aufschluss darüber geben, ob die Anfrage von einem bekannten Browser oder einer anderen Art von Software stammt.
Der Fehler, den die meisten Web-Scraping-Bots und Automatisierungsskripte machen, besteht darin, Standard- oder Nicht-Browser-User-Agents zu verwenden. Diese Werte können leicht von Anti-Bot-Maßnahmen erkannt werden, die zum Schutz von Webseiten entwickelt wurden. Durch die Analyse des User-Agent-Headers können Server feststellen, ob die Anfrage möglicherweise von einem automatisierten Bot stammt.
Weitere Informationen finden Sie in unserem Leitfaden zu User Agents für Web-Scraping.
Was ist der Standard-User-Agent von Puppeteer?
Puppeteer automatisiert Browseraufgaben, indem es eine spezielle Version eines realen Webbrowsers steuert. Standardmäßig wird eine bestimmte Version von Chrome ausgeführt, obwohl auch Firefox unterstützt wird. Daher könnte man annehmen, dass der Standard-User-Agent in Puppeteer mit dem der gesteuerten Chrome-Version übereinstimmt. Das ist jedoch nicht der Fall…
Der Grund dafür ist, dass Puppeteer den Browser standardmäßig im Headless-Modus startet. Wenn Browser im Headless-Modus betrieben werden, legen sie in der Regel einen eindeutigen User-Agent fest. In der aktuellen Version sieht der Standard-User-Agent von Puppeteer wie folgt aus:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/127.0.0.0 Safari/537.3
Beachten Sie die Zeichenfolge „HeadlessChrome“, die angibt, dass Chrome im Headless-Modus ausgeführt wird. Es überrascht nicht, dass die obige Zeichenfolge genau dem User-Agent der neuesten Version von Headless Chrome entspricht.
Um zu bestätigen, dass es sich bei der oben genannten Zeichenfolge tatsächlich um den Standard-User-Agent von Puppeteer handelt, richten Sie ein Skript ein und navigieren Sie zur Seite httpbin.io/user-agent. Dieser API-Endpunkt gibt den User-Agent-Header der Anfrage zurück und hilft Ihnen so, den von einem Browser oder HTTP-Client verwendeten User-Agent zu ermitteln.
Erstellen Sie ein Puppeteer -Skript, rufen Sie die gewünschte Seite auf, rufen Sie die API-Antwort aus dem Body ab und geben Sie sie aus:
import puppeteer from "puppeteer";
(async () => {
// Starten Sie den Browser und öffnen Sie eine neue Seite.
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Stellen Sie eine Verbindung zur Zielseite her.
await page.goto("https://httpbin.io/user-agent");
// Extrahieren Sie den Body-Text mit der API-Antwort
// und geben Sie ihn aus
const bodyText = await page.evaluate(() => {
return document.body.innerText;
});
console.log(bodyText);
// Schließen Sie den Browser und geben Sie seine Ressourcen frei
await browser.close();
})();
Weitere Informationen zur Puppeteer-API finden Sie in unserem Leitfaden zum Web-Scraping mit Puppeteer.
Führen Sie den oben stehenden Node.js-Code aus, und Sie erhalten die folgende Zeichenfolge:
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/127.0.0.0 Safari/537.36"
}
Beachten Sie, dass der von Puppeteer festgelegte User-Agent mit der zuvor angezeigten Zeichenfolge übereinstimmt.
Das Problem liegt in der Kennung „HeadlessChrome“, die Anti-Bot-Systeme alarmieren kann. Diese Systeme analysieren eingehende Anfragen auf Muster, die auf Bot-Aktivitäten hindeuten könnten, wie z. B. ungewöhnliche User-Agent-Zeichenfolgen. Verdächtige Anfragen werden entsprechend markiert und blockiert. Aus diesem Grund ist es so wichtig, die Standard-User-Agent-Zeichenfolge von Puppeteer zu ändern!
So ändern Sie den Puppeteer-User-Agent
Das Ändern des User-Agents ist eine so häufige und nützliche Operation, dass Puppeteer eine spezielle Methode dafür bereitstellt. Insbesondere die Page-Klasse stellt die Methode setUserAgent() zur Verfügung. Damit können Sie den von Puppeteer festgelegten User-Agent ändern, wenn Sie in diesem Browser-Tab zu Webseiten navigieren.
Verwenden Sie setUserAgent(), um den Puppeteer -User-Agent wie folgt zu ändern:
await page.setUserAgent("<your_user_agent>");
Alle HTTP-GET-Anfragen, die durch Aufrufen der Methode goto() auf der Seite gestellt werden, haben nun einen benutzerdefinierten User-Agent-Header. Beachten Sie, dass diese Änderung nur für das jeweilige Seitenobjekt gilt. Wenn Sie eine neue Seite öffnen und mit ihr interagieren, verwendet Puppeteer den zuvor angezeigten Standard-User-Agent.
Ein vollständiges Beispiel finden Sie im folgenden Ausschnitt:
import puppeteer from "puppeteer";
(async () => {
// Starten Sie den Browser und öffnen Sie eine neue Seite.
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Legen Sie einen benutzerdefinierten User-Agent fest.
await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36");
// zur Zielseite verbinden
await page.goto("https://httpbin.io/user-agent");
// Extrahieren Sie den Textkörper mit der API-Antwort
// und drucken Sie ihn aus
const bodyText = await page.evaluate(() => {
return document.body.innerText;
});
console.log(bodyText);
// Schließen Sie den Browser und geben Sie seine Ressourcen frei
await browser.close();
})();
Führen Sie das obige Skript aus, und dieses Mal lautet das Ergebnis:
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
}
Großartig! Die aus der Seite extrahierte User-Agent-Zeichenfolge stimmt mit dem im Code konfigurierten User-Agent überein. Sie wissen nun, wie Sie die Puppeteer- Funktion zum Ändern des User-Agents ausführen.
Implementieren Sie die User-Agent-Rotation in Puppeteer
Das Ersetzen des User-Agent-Headers eines Headless-Browsers durch einen aus einem Nicht-Headless-Browser reicht möglicherweise nicht aus, um Anti-Bot-Systeme zu umgehen. Das Problem ist, dass Ihr Browser-Automatisierungsskript Muster aufweist, die auf nicht-menschliches Verhalten hindeuten. Dies gilt insbesondere, wenn Sie eine große Anzahl von Anfragen mit denselben Headern von derselben IP-Adresse senden.
Um das Risiko einer Bot-Erkennung in Puppeteer zu minimieren, müssen Sie Ihre Anfragen so vielfältig wie möglich gestalten. Eine effektive Methode besteht darin, für jede Anfrage einen anderen User Agent festzulegen. Diese Strategie wird als User-Agent-Rotation bezeichnet und hilft Ihnen, die Wahrscheinlichkeit zu verringern, als Bot markiert zu werden.
Im folgenden Abschnitt des Tutorials erfahren Sie, wie Sie die User-Agent-Rotation in Puppeteer implementieren können!
Schritt 1: Generieren Sie einen zufälligen User-Agent
Es gibt zwei Hauptansätze, um einen zufälligen User-Agent zu erhalten. Der erste besteht darin, eine Liste gültiger User-Agents zu erstellen und einen zufälligen aus der Liste auszuwählen, wie in unserem Node.js-User-Agent-Leitfaden gezeigt.
Der zweite Ansatz besteht darin, eine User-Agent-Generator-Bibliothek eines Drittanbieters zu verwenden. Die beliebteste in JavaScript ist user-agents, ein Paket, das gültige User-Agents für Sie generieren kann. In diesem Leitfaden werden wir diese Methode anwenden!
Führen Sie diesen npm-Befehl aus, um die user-agents- Bibliothek zu den Abhängigkeiten Ihres Projekts hinzuzufügen:
npm install user-agents
Beachten Sie, dass user-agents täglich aktualisiert wird, sodass es immer die neuesten User Agents enthält.
Importieren Sie nach der Installation der Bibliothek das UserAgent -Objekt in Ihr Puppeteer -Skript:
import UserAgent from "user-agents";
Mit dem folgenden Code können Sie nun eine zufällige User-Agent-Zeichenfolge generieren:
const userAgent = new UserAgent().random().toString();
Weitere Informationen zu fortgeschrittenen Anwendungsmöglichkeiten, z. B. zum Abrufen von User-Agents für bestimmte Geräte, Betriebssysteme und mehr, finden Sie in der offiziellen Dokumentation.
Schritt 2: Zufälligen User-Agent festlegen
Übergeben Sie die zufällige User-Agent-Zeichenfolge an Puppeteer, indem Sie die Methode setUserAgent() aufrufen:
const userAgent = new UserAgent().random().toString();
await page.setUserAgent(userAgent);
Alle über das Seitenobjekt ausgeführten Anfragen haben nun einen benutzerdefinierten User-Agent, der zufällig generiert wird.
Schritt 3: Besuchen Sie die Zielseite
Rufen Sie die Methode goto() auf der Seite auf, um Ihre Zielwebseite im kontrollierten Headless-Browser aufzurufen:
await page.goto("https://httpbin.io/user-agent");
Schritt 4: Alles zusammenfügen
Nachfolgend finden Sie Ihr endgültiges Puppeteer -Skript zur Rotation von User-Agents:
import puppeteer from "puppeteer";
import UserAgent from "user-agents";
(async () => {
// Starten Sie den Browser und öffnen Sie eine neue Seite.
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Zufälligen User-Agent generieren
const userAgent = new UserAgent().random().toString();
// Zufälligen User-Agent festlegen
await page.setUserAgent(userAgent);
// Mit der Zielseite verbinden
await page.goto("https://httpbin.io/user-agent");
// Extrahieren Sie den Textkörper mit der API-Antwort
// und drucken Sie ihn aus
const bodyText = await page.evaluate(() => {
return document.body.innerText;
});
console.log(bodyText);
// Schließen Sie den Browser und geben Sie seine Ressourcen frei
await browser.close();
})();
Führen Sie das Skript einige Male aus, und Sie sollten verschiedene User Agents sehen.
Et voilà! Die User-Agent-Rotationslogik in Puppeteer funktioniert wie am Schnürchen.
Festlegen eines benutzerdefinierten User Agents in Puppeteer mit puppeteer-extra-plugin-anonymize-ua
Die oben genannten Ansätze zur Einstellung des Puppeteer- User -Agents sind effektiv, haben jedoch einen erheblichen Nachteil. Die Methode userAgent() ändert den User-Agent nur für eine bestimmte Seitensitzung, nicht für alle Browser-Tabs.
Um sicherzustellen, dass Puppeteer niemals den Standard-User-Agent verwendet, können Sie das Plugin puppeteer-extra-plugin-anonymize-ua von Puppeteer Extra verwenden. Falls Sie mit diesem Projekt nicht vertraut sind: Puppeteer Extra erweitert Puppeteer um die Unterstützung von Community-definierten Plugins. Weitere Informationen finden Sie in unserem Leitfaden zum Puppeteer Extra Stealth-Plugin.
Das Plugin puppeteer-extra-plugin-anonymize-ua kann den von Puppeteer festgelegten User-Agent anonymisieren. Um puppeteer-extra und das erforderliche Plugin zu installieren, führen Sie den folgenden Befehl aus:
npm install puppeteer-extra puppeteer-extra-plugin-anonymize-ua
Importieren Sie anschließend puppeteer aus puppeteer-extra und AnonymizeUAPlugin aus puppeteer-extra-plugin-anonymize-ua:
import puppeteer from "puppeteer-extra";
import AnonymizeUAPlugin from "puppeteer-extra-plugin-anonymize-ua";
Konfigurieren Sie puppeteer-extra-plugin-anonymize-ua so, dass ein zufälliger User Agent generiert und mit der Methode use() von Puppeteer Extra als Plugin registriert wird:
puppeteer.use(
AnonymizeUAPlugin({
customFn: () => new UserAgent().random().toString(),
})
);
Versuchen Sie nun, Seiten in zwei verschiedenen Registerkarten mit zwei separaten Seitenobjekten aufzurufen:
import puppeteer from "puppeteer-extra";
import AnonymizeUAPlugin from "puppeteer-extra-plugin-anonymize-ua";
import UserAgent from "user-agents";
(async () => {
// Konfigurieren und registrieren Sie das
// puppeteer-extra-plugin-anonymize-ua-Plugin
puppeteer.use(
AnonymizeUAPlugin({
customFn: () => new UserAgent().random().toString(),
})
);
// Starten Sie den Browser und öffnen Sie eine neue Seite.
const browser = await puppeteer.launch();
// Öffnen Sie eine neue Seite.
const page1 = await browser.newPage();
// Verbindung zur Zielseite herstellen
await page1.goto("https://httpbin.io/user-agent");
// Textkörper mit der API-Antwort extrahieren
// und ausgeben
const bodyText1 = await page1.evaluate(() => {
return document.body.innerText;
});
console.log(bodyText1);
// Neue Seite öffnen
const page2 = await browser.newPage();
// Mit der Zielseite verbinden
await page2.goto("https://httpbin.io/user-agent");
// Extrahieren Sie den Textkörper mit der API-Antwort.
// und drucken Sie ihn aus.
const bodyText2 = await page2.evaluate(() => {
return document.body.innerText;
});
console.log(bodyText2);
// Schließen Sie den Browser und geben Sie seine Ressourcen frei.
await browser.close();
})();
Das Ergebnis sind zwei verschiedene User Agents, wie unten gezeigt:
{
"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1"
}
{
„user-agent”: „Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36”
}
Die beiden User Agents sind unterschiedlich und keiner davon ist der Standard-User Agent von Puppeteer. Das liegt daran, dass puppeteer-extra-plugin-anonymize-ua jedes Seitenobjekt mit einem zufälligen User Agent anpasst, wie in der Funktion customFn angegeben. Auf diese Weise gibt Puppeteer niemals seinen Standard-User Agent preis!
Fazit
In diesem Artikel haben Sie die Bedeutung der Einstellung des User-Agent-Headers kennengelernt und gesehen, wie der Standard-User-Agent von Puppeteer aussieht. Sie haben gelernt, wie Sie diesen Wert überschreiben und eine User-Agent-Rotation implementieren können, um einfache Anti-Scraping-Systeme zu umgehen. Allerdings können komplexere Systeme Ihre automatisierten Anfragen dennoch erkennen und blockieren. Um IP-Sperren zu vermeiden, können Sie in Puppeteer einen Proxy konfigurieren, aber selbst das reicht möglicherweise nicht immer aus!
Eine effektivere Lösung ist der Scraping-Browser– ein Browser der nächsten Generation, der sich in Puppeteer und jedes andere Browser-Automatisierungstool integrieren lässt. Der Scraping-Browser umgeht mühelos Anti-Bot-Technologien und vermeidet gleichzeitig Browser-Fingerprinting. Im Hintergrund nutzt es Funktionen wie User-Agent-Rotation, IP-Rotation und CAPTCHA-Lösung. Browser-Automatisierung war noch nie so einfach!
Melden Sie sich jetzt an und starten Sie Ihre kostenlose Testversion.