Warum Puppeteer einen Proxy benötigt
Proxys für Puppeteer ermöglichen es dem Tool, eine Verbindung über eine andere IP-Adresse herzustellen, anstatt immer die IP-Adresse des Rechners zu verwenden, auf dem es ausgeführt wird. Dies ist nützlich für standortbezogene Aufgaben, Tests, Überwachungen und andere Aufgaben, bei denen die Herkunft der Verbindung eine Rolle spielt.
Puppeteer übernimmt weiterhin die eigentliche Aufgabe. Der Proxy regelt, woher die Verbindung stammt.
Was passiert ohne Proxy: IP-Sperren, Ratenbegrenzungen, Geoblocking
Ohne Proxy sehen Websites immer dieselbe IP-Adresse. Bei zunehmender Aktivität kann diese IP-Adresse an eine Ratenbegrenzung stoßen oder gesperrt werden.
Auch der Standort kann eine Rolle spielen. Eine Seite, die von Deutschland aus aufgerufen wird, zeigt möglicherweise nicht denselben Inhalt an wie eine Seite, die von den USA aus aufgerufen wird.
Ein Proxy für Puppeteer ermöglicht es, bei Bedarf eine Verbindung über verschiedene IP-Adressen und Standorte herzustellen.
Welcher Proxy-Typ sollte mit Puppeteer verwendet werden?
Der richtige Proxy-Typ hängt von der jeweiligen Aufgabe ab.
| Proxy-Typ | Scraping | Kontoverwaltung | Testen | Überwachung |
|---|
| Privat-IP | Gut geeignet, wenn Standort und IP-Quelle eine Rolle spielen | Nützlich, wenn Konten Privat-IPs benötigen | Gut für standortbasierte Tests | Nützlich zur Überprüfung von Inhalten von verschiedenen Standorten aus |
| ISP | Gut, wenn eine stabile IP benötigt wird | Nützlich für längere Sitzungen mit einer IP | Gut für Tests mit einer konsistenten IP | Nützlich für fortlaufende Überprüfungen von derselben IP |
| Rechenzentrum | Gut für Geschwindigkeit und größere Anfragevolumina | Besser, wenn Residential-IPs nicht erforderlich sind | Gut für allgemeine Tests | Gut für häufige automatisierte Überprüfungen |
Privat-Proxys sind nützlich, wenn die IP-Quelle und der Standort eine Rolle spielen. ISP-Proxys eignen sich gut, wenn dieselbe IP-Adresse über einen längeren Zeitraum aktiv bleiben muss. Rechenzentrums-Proxys sind sinnvoll, wenn der Schwerpunkt auf Geschwindigkeit und Skalierbarkeit liegt.
Die beste Option hängt auch davon ab, ob die Aufgabe Geo-Targeting, eine stabile Verbindung oder den Zugriff auf einen größeren IP-Pool erfordert.
So richten Sie einen Proxy in Puppeteer ein
Für die Proxy-Einrichtung in Puppeteer werden der Host, der Port, der Benutzername und das Passwort von Geonode benötigt. Speichern Sie die Anmeldedaten in Umgebungsvariablen und laden Sie sie dann beim Einrichten des Proxys im Code.
Verwenden Sie „Geonode“? Die Anmeldedaten finden Sie unter Zugangsdaten und den Host, den Port sowie das Protokoll unter Proxy-Server-Informationen.
Einstellungs-Pfad oder Code
Bei Puppeteer müssen Sie den Proxy-Host und den Port beim Starten des Browsers über „--proxy-server
“ übergeben:
import puppeteer from "puppeteer";
import "dotenv/config";
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
],
});
Erstellen Sie anschließend die Seite und geben Sie die Proxy-Anmeldedaten an:
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Speichern Sie den tatsächlichen Benutzernamen und das Passwort in Umgebungsvariablen, anstatt sie direkt in die Quelldatei einzufügen. Diese Konfiguration hat in unserem Test erfolgreich einen HTTP-Status 200 über den Proxy zurückgegeben.
Das Authentifizierungsformat „host:port:user:pass“
Geonode
liefert Ihnen vier Werte:
proxy.geonode.io:PORT:USERNAME:PASSWORD
Für Puppeteer sollten Sie die Werte getrennt halten. Speichern Sie sie in Umgebungsvariablen:
GEONODE_PROXY_HOST=proxy.geonode.io
GEONODE_PROXY_PORT=9000
GEONODE_PROXY_USER=USERNAME
GEONODE_PROXY_PASS=PASSWORD
Laden Sie den Host und den Port über --proxy-server
und authentifizieren Sie anschließend die Seite:
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Wir haben dies mit gültigen Anmeldedaten getestet und den HTTP-Status 200 erhalten. Bei einem falschen Passwort gab der Proxy den HTTP-Status 407 zurück und:
Authentication error. Please check your authentication settings.
Rotation vs. Sticky Session in Puppeteer
Wenn die Anfragen nicht dieselbe IP-Adresse beibehalten müssen, verwenden Sie die Rotation.
Für unseren Test haben wir Puppeteer mit rotierendem HTTP-Port gestartet:
const browser = await puppeteer.launch({
headless: true,
args: ["--proxy-server=http://proxy.geonode.io:9000"],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Wir haben fünf Anfragen über neue Browsersitzungen gestellt:
Request 1: 108.31.182.167
Request 2: 45.186.93.125
Request 3: 109.254.131.42
Request 4: 109.153.11.141
Request 5: 37.113.173.139
Eindeutige IP-Adressen: 5
Rotation: Ja
Alle fünf Anfragen lieferten in diesem Test unterschiedliche IP-Adressen. Das bestätigt, dass die Rotation während des Durchlaufs funktioniert hat, garantiert jedoch nicht für jede zukünftige Anfrage eine neue IP-Adresse.
Wenn zusammengehörige Anfragen dieselbe IP-Adresse beibehalten müssen, verwenden Sie stattdessen eine „Sticky Session“. Verwenden Sie den „Sticky“-Port und fügen Sie die Sitzungsdetails zum Benutzernamen hinzu:
const browser = await puppeteer.launch({
headless: true,
args: ["--proxy-server=http://proxy.geonode.io:10000"],
});
const page = await browser.newPage();
await page.authenticate({
username:
`${process.env.GEONODE_PROXY_USER}-session-blogpuppeteer01-lifetime-10`,
password: process.env.GEONODE_PROXY_PASS,
});
Wir haben drei Anfragen unter Verwendung derselben Sitzung gestellt:
Request 1: 178.64.64.40
Request 2: 178.64.64.40
Request 3: 178.64.64.40
Gleiche IP: Ja
Alle drei Anfragen nutzten dieselbe IP-Adresse.
Die verfügbaren Einstellungen finden Sie in den Anleitungen unter Geonode
zu rotierenden Proxys und Sticky-Sessions.
Häufige Proxy-Fehler in Puppeteer und wie man sie behebt
Wenn der Proxy nicht funktioniert, überprüfen Sie zunächst die Verbindungsdaten. Überprüfen Sie den Benutzernamen und das Passwort sowie den Host, den Port und das Protokoll. Die von Puppeteer zurückgegebene Fehlermeldung kann in der Regel dabei helfen, das Problem einzugrenzen.
407 Proxy-Authentifizierung erforderlich
Ein 407-Fehler deutet in der Regel auf ein Authentifizierungsproblem hin.
Als wir Puppeteer mit einem falschen Passwort getestet haben, gab der Proxy folgende Meldung zurück: „
HTTP status: 407
Authentication error. Please check your authentication settings.
```“
Überprüfen Sie zunächst den Benutzernamen und das Passwort. Wenn diese korrekt sind, stellen Sie sicher, dass nach dem Erstellen der Seite „`page.authenticate()`“ aufgerufen wird.
ERR_TUNNEL_CONNECTION_FAILED / Verbindung abgelehnt
Ein Verbindungsfehler bedeutet in der Regel, dass Puppeteer den Proxy nicht erreichen konnte.
Überprüfen Sie zunächst den Host und den Port. Stellen Sie anschließend sicher, dass das Protokoll mit dem verwendeten Proxy-Server übereinstimmt.
In unserem Test mit fehlgeschlagener Verbindung gab Puppeteer nicht „ERR_TUNNEL_CONNECTION_FAILED
“ zurück. Bei Verwendung eines nicht erreichbaren Proxy-Ports wurde Folgendes zurückgegeben: „
net::ERR_CONNECTION_RESET at http://ip-api.com/json
“. Der genaue Chromium-Fehler kann daher je nach Art des Verbindungsfehlers variieren.
Timeouts und leere Antworten
Ein Timeout bedeutet, dass die Seite innerhalb der konfigurierten Zeit keine Antwort erhalten hat.
Überprüfen Sie zunächst, ob die Ziel-URL funktioniert und ob der Proxy eine Verbindung herstellen kann. Wenn beides funktioniert, überprüfen Sie das an ``page.goto()`
` übergebene Timeout.
Für unseren Test haben wir einen nicht routbaren Proxy mit einem Timeout von fünf Sekunden verwendet:
await page.goto(url, {
timeout: 5000,
});
Puppeteer gab Folgendes zurück:
TimeoutError: Navigation timeout of 5000 ms exceeded
Die Festlegung eines expliziten Timeouts kann dazu beitragen, dass ein Skript schnell fehlschlägt, wenn die Proxy-Verbindung hängt.
ERR_NO_SUPPORTED_PROXIES
Ein Problem, das wir speziell bei Puppeteer festgestellt haben, war die direkte Angabe von Benutzername und Passwort in „--proxy-server
“.
Diese Konfiguration schlug fehl:
--proxy-server=http://USERNAME:PASSWORD@proxy.geonode.io:9000
Puppeteer gab folgende Fehlermeldung zurück:
net::ERR_NO_SUPPORTED_PROXIES
Die Lösung besteht darin, nur den Proxy-Server über das Startargument zu übergeben:
args: ["--proxy-server=http://proxy.geonode.io:9000"]
Anschließend erfolgt die Authentifizierung separat:
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Nach der Änderung der Konfiguration wurde die Anfrage mit dem HTTP-Status 200 erfolgreich ausgeführt.
Puppeteer + „Geonode“: Was Sie davon haben
Puppeteer übernimmt die Anfragen bzw. Verbindungen in der Anwendung. „Geonode“ kümmert sich um die Proxy-Verbindung.
Je nach Aufgabe können Sie zwischen Privat-, ISP- oder Rechenzentrums-Proxys wählen und bei Bedarf Rotation, Sticky Sessions und Geo-Targeting nutzen. Dadurch bleibt die Proxy-Konfiguration vom restlichen Anwendungscode getrennt.
Die Tarife variieren je nach Proxy-Typ, wobei einige Optionen pro GB abgerechnet werden.
Unterstützt Puppeteer „SOCKS5“-Proxys?
Authentifizierte SOCKS5-Verbindungen funktionierten mit der von uns getesteten Puppeteer-Konfiguration nicht.
Wir haben versucht, den rotierenden Port von Geonode (SOCKS5) mit page.authenticate() zu nutzen, doch Puppeteer gab folgende Fehlermeldung zurück:
net::ERR_SOCKS_CONNECTION_FAILED
Außerdem haben wir versucht, die Anmeldedaten in --proxy-server einzubetten, was folgende Fehlermeldung zur Folge hatte:
net::ERR_NO_SUPPORTED_PROXIES
Da keine der getesteten Konfigurationen mit authentifizierten SOCKS5-Verbindungen funktionierte, ist die verifizierte HTTP-Konfiguration mit --proxy-server und page.authenticate() die sicherere Option für diese Konfiguration.
Kann ich in Puppeteer die IP-Adressen pro Anfrage rotieren lassen?
Ja, Puppeteer kann einen rotierenden Proxy verwenden, wenn der Browser über die Konfiguration für den rotierenden Proxy gestartet wird.
In unserem Test ergaben fünf neue Browsersitzungen fünf verschiedene IP-Adressen. Das bestätigt, dass während des Tests eine Rotation stattfand, allerdings ist eine unterschiedliche IP-Adresse nicht für jede Anfrage oder Browsersitzung garantiert.
Gibt es eine kostenlose Testversion?
Ja. Geonode bietet eine kostenlose Testversion an, sodass der Proxy mit Puppeteer getestet werden kann, bevor man zu einem kostenpflichtigen Tarif wechselt. Hier finden Sie Informationen zur aktuellen kostenlosen Testversion und zu den Tarifen.
Wo muss ich den Proxy in Puppeteer konfigurieren?
Legen Sie den Proxy-Host und den Port unter „puppeteer.launch()
“ mithilfe von „--proxy-server
“ fest.
Rufen Sie anschließend nach der Erstellung jeder Seite „page.authenticate()
“ auf, um den Benutzernamen und das Passwort anzugeben:
const browser = await puppeteer.launch({
args: ["--proxy-server=http://proxy.geonode.io:9000"],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Diese Konfiguration hat in unseren Tests funktioniert.
Soll ich den Benutzernamen und das Passwort für den Proxy in „--proxy-server“ angeben?
Nein. Bei dieser Puppeteer-Konfiguration sollten die Anmeldedaten separat gehalten werden.
Die direkte Einbindung von USERNAME:PASSWORD@ in --proxy-server führte in unserem Test zu der Fehlermeldung „ERR_NO_SUPPORTED_PROXIES“. Die Angabe von Host und Port an dieser Stelle und die anschließende Verwendung von page.authenticate() für die Anmeldedaten funktionierte hingegen einwandfrei.