Eine Low-Code-Plattform, die die Einfachheit von No-Code mit der Leistung von Full-Code verbindet 🚀
Jetzt kostenlos starten
Proxy-Konfiguration in Puppeteer: Authentifizierungs-, Rotations- und Bypass-Techniken
24. März 2025
8
min lesen

Proxy-Konfiguration in Puppeteer: Authentifizierungs-, Rotations- und Bypass-Techniken

Georgi Miloradowitsch
Forscher, Texter und Usecase-Interviewer
Inhaltsverzeichnis

Proxys sind unerlässlich für Puppenspieler Automatisierung. Sie verbergen Ihre IP, umgehen geografische Beschränkungen und helfen, Sperren zu vermeiden. Hier erfahren Sie mehr über die Verwendung von Proxys in Puppenspieler:

  1. Proxys einrichten: Fügen Sie Ihrem Browser Proxys hinzu und authentifizieren Sie sie problemlos.
  2. Proxys rotieren: Verteilen Sie Anfragen auf mehrere IPs, um eine Erkennung zu vermeiden.
  3. Behandeln Sie Fehler: Wiederholen Sie Anfragen, verwalten Sie Blöcke und wechseln Sie bei Bedarf den Proxy.
  4. Geschwindigkeit optimieren: Blockieren Sie unnötige Ressourcen und wechseln Sie Benutzeragenten für schnelleres, heimlicheres Scraping.

Schneller Vergleich der Proxy-Typen

Proxy-Typ Schnelligkeit Anonymität Kosten Geeignet für
Datacenter Schnell Niedrig Kostengünstig Großvolumiges Schaben
Wohnungen Konservativ Hoch Teuer Sensible oder geospezifische Aufgaben
Mobil Bremst Sehr hoch Sehr teuer Anzeigenüberprüfung, CAPTCHAs

Puppenspieler Proxy-Integration mit Helle Daten - Vollständiges Tutorial 2024

Puppenspieler

Grundlegende Proxy-Einrichtung

Die Einrichtung eines Proxys ist ein wichtiger Schritt zur Optimierung Ihrer Puppeteer-Automatisierung. So können Sie loslegen.

Hinzufügen eines Proxy-Servers

Sie können einen Proxyserver während des Browserstarts in Puppeteer wie folgt konfigurieren:

const browser = await puppeteer.launch({
    args: ['--proxy-server=http://157.230.255.230:8118']
});
const page = await browser.newPage();

Es ist auch wichtig, Fehler bei der Navigation mit einem Proxy zu behandeln:

try {
    await page.goto('https://books.toscrape.com/', {
        timeout: 70000,
        waitUntil: 'networkidle2'
    });
} catch (err) {
    console.log(err);
}

Als Nächstes möchten Sie Ihre Verbindung durch die Einrichtung einer Proxy-Authentifizierung sichern.

Schritte zur Proxy-Authentifizierung

Wenn Ihr Proxy eine Authentifizierung erfordert, können Sie die folgende Methode verwenden:

await page.authenticate({
    username: 'your_proxy_username',
    password: 'your_proxy_password'
});

Hier ist ein kurzer Vergleich verschiedener Authentifizierungsmethoden:

Authentifizierungsmethode Bester Anwendungsfall Implementierungskomplexität
page.authenticate() Standard-Proxy-Authentifizierung Niedrig
proxy-chain Paket Fortgeschrittenes Routing Verwendung
Proxy-Authorization Kopfzeile Nur-HTTP-Sites Hoch

Nachdem Sie Ihren Proxy und die Authentifizierung eingerichtet haben, ist es Zeit, sie zu testen.

Testen der Proxy-Einstellungen

Stellen Sie sicher, dass Ihr Proxy funktioniert, indem Sie die folgenden Schritte ausführen:

  • Testen Sie die Verbindung mit einer Beispiel-URL.
  • Bestätigen Sie, dass die IP des Proxys verwendet wird.
  • Überwachen Sie die Leistung des Setups.

Hier ist ein Beispielskript zum Testen Ihres Proxys:

async function testProxy() {
    const browser = await puppeteer.launch({
        args: ['--proxy-server=http://157.230.255.230:8118']
    });
    const page = await browser.newPage();
    try {
        await page.goto('https://books.toscrape.com/', {
            timeout: 70000,
            waitUntil: 'networkidle2'
        });
        const content = await page.content();
        console.log('Proxy connection successful');
    } catch (err) {
        console.log('Proxy connection failed:', err);
    }
    await browser.close();
}

Durch Tests wird sichergestellt, dass Ihre Proxy-Konfiguration für die Verwendung in Ihren Automatisierungsaufgaben bereit ist.

Proxy-Rotationsmethoden

Die Verwaltung der Proxy-Rotation ist wichtig, um IP-Sperren zu verhindern und Ratenbegrenzungen beim Scraping oder Automatisieren von Online-Aufgaben zu vermeiden.

Erstellen einer Proxy-Liste

Erstellen Sie zunächst eine Liste mit Proxys, die effizient rotiert werden können. Hier ist ein Beispiel für die Einrichtung und Verwendung eines Proxy-Pools:

const proxyList = [
    {
        host: '157.230.255.230',
        port: '8118',
        username: 'user1',
        password: 'pass1'
    },
    // Add more proxy configurations
];

function getRandomProxy() {
    return proxyList[Math.floor(Math.random() * proxyList.length)];
}

Beim Einrichten Ihrer Proxyliste ist es wichtig, die verschiedenen Proxytypen und ihre Vor- und Nachteile zu verstehen:

Proxy-Typ Reaktionszeit Erfolgsrate Kostenbereich
Datacenter 100-300ms 85-95 % 0.50–2 $/IP
Wohnungen 500-1000ms 90-98 % 2–8 $/IP
Mobil 800-1500ms 95-99 % 5–15 $/IP

Jeder Typ hat seine Stärken und Schwächen. Treffen Sie Ihre Wahl also auf der Grundlage Ihrer spezifischen Anforderungen, beispielsweise Geschwindigkeit, Zuverlässigkeit oder Budget.

Wechseln von Proxys zwischen Anfragen

Um Proxys automatisch zu rotieren, können Sie das folgende Setup verwenden:

const ProxyChain = require('proxy-chain');

const server = new ProxyChain.Server({
    port: 8080,
    prepareRequestFunction: ({ request }) => {
        const proxy = getRandomProxy();
        return {
            upstreamProxyUrl: `http://${proxy.username}:${proxy.password}@${proxy.host}:${proxy.port}`
        };
    }
});

const browser = await puppeteer.launch({
    args: ['--proxy-server=http://localhost:8080']
});

Dieser Ansatz stellt sicher, dass jede Anfrage über einen anderen Proxy geleitet wird, ohne den Browser neu zu starten, was den Prozess effizienter macht.

Richtlinien zur Proxy-Rotation

Hier sind einige wichtige Vorgehensweisen zur Verbesserung Ihrer Proxy-Rotationsstrategie:

1. Timing-Strategie

Führen Sie zufällige Verzögerungen zwischen den Anfragen ein, um ein natürliches Browsing-Verhalten zu simulieren:

function getRotationDelay() {
    // Random delay between 2-5 seconds
    return Math.floor(Math.random() * 3000) + 2000;
}

async function rotateProxy() {
    await new Promise(resolve => setTimeout(resolve, getRotationDelay()));
    const proxy = getRandomProxy();
    // Apply new proxy configuration
}

2. Fehlerbehandlung

Wenn ein Proxy ausfällt, beheben Sie den Fehler ordnungsgemäß, indem Sie zu einem neuen wechseln und die Anforderung wiederholen:

async function handleProxyError(error, page) {
    console.log(`Proxy error: ${error.message}`);
    await rotateProxy();
    return page.reload({ waitUntil: 'networkidle2' });
}

3. Sitzungsverwaltung

Verwenden Sie für Aufgaben, die Sitzungskonsistenz erfordern, denselben Proxy für verwandte Anforderungen:

const sessionMap = new Map();

function getProxyForSession(sessionId) {
    if (!sessionMap.has(sessionId)) {
        sessionMap.set(sessionId, getRandomProxy());
    }
    return sessionMap.get(sessionId);
}

Mit diesen Strategien können Sie Proxys effizient verwalten und sich auf anspruchsvollere Herausforderungen wie die Handhabung von Blöcken, CAPTCHAs und anderen Hindernissen vorbereiten.

sbb-itb-23997f1

Erweiterte Proxy-Techniken

Privat- oder Rechenzentrums-Proxys

Die Auswahl des richtigen Proxys ist entscheidend für die Arbeit mit Puppeteer-Automatisierung. Hier ist ein Vergleich, der Ihnen die Entscheidung erleichtert:

Merkmal Wohnimmobilien Proxies für Rechenzentren
Quelle Von ISPs für Privathaushalte bereitgestellt Aus Rechenzentren bezogen
Schnelligkeit Langsamer aufgrund des ISP-Routings Schneller mit dedizierter Infrastruktur
Erkennungsrisiko Niedriger - simuliert echten Benutzerverkehr Höher - leichter zu erkennen
Kosten Teurer Kosteneffizient
Geografische Abdeckung Breit gefächert und standortübergreifend Oft begrenzt
Beste Anwendungsfälle Aufgaben mit hoher Anonymität, sensibles Scraping, Anzeigenüberprüfung Umfangreiches Data Mining, Stapelverarbeitung

Residential Proxies sind eine gute Wahl für Aufgaben, die ein hohes Maß an Anonymität erfordern, da sie der tatsächlichen Benutzeraktivität sehr nahe kommen.

Umgang mit Blöcken und CAPTCHAs

Um Website-Blockaden und CAPTCHA-Herausforderungen zu bewältigen, nutzen Sie Proxy-Rotation und Wiederholungsmechanismen. Hier ist ein Beispiel, wie Sie diese Probleme lösen können:

const proxyManager = {
    rotationDelay: 2000,
    async handleBlock(page) {
        await page.waitForTimeout(this.rotationDelay);
        const newProxy = await this.getNextProxy();
        await page.authenticate(newProxy);
        return page.reload({ waitUntil: 'networkidle0' });
    },
    async detectBlock(response) {
        return response.status() === 403 || response.status() === 429;
    }
};

Wenn eine Blockierung erkannt wird, kann ein erneuter Versuch mit einem neuen Proxy dafür sorgen, dass Ihre Automatisierung reibungslos läuft:

page.on('response', async (response) => {
    if (await proxyManager.detectBlock(response)) {
        await proxyManager.handleBlock(page);
    }
});

Diese Strategien tragen dazu bei, die Kontinuität des Arbeitsablaufs auch bei Herausforderungen aufrechtzuerhalten.

Verwalten von Proxy-Fehlern

Für die effektive Behandlung von Proxy-Fehlern sind Timeout-Anpassungen, Validierungsprüfungen und Backup-Proxys erforderlich. Beispiel:

async function handleProxyError(error, page) {
    if (error.message.includes('net::ERR_PROXY_CONNECTION_FAILED')) {
        const newProxy = await getBackupProxy();
        await page.authenticate(newProxy);
        await page.setExtraHTTPHeaders({
            'User-Agent': generateRandomUserAgent()
        });
        return page.reload({ waitUntil: 'networkidle2' });
    }
}

Befolgen Sie diese Richtlinien für ein besseres Fehlermanagement:

  • Legen Sie Verbindungstimeouts fest, um längere Wartezeiten zu vermeiden.
  • Überwachen Sie kontinuierlich die Proxy-Leistung.
  • Halten Sie einen Pool von Backup-Proxys bereit.

Auch die richtige Konfiguration Ihres Browsers trägt zur Gewährleistung einer reibungslosen Leistung bei:

const browser = await puppeteer.launch({
    args: ['--proxy-server=http://proxy-server:port'],
    timeout: 60000,
    waitUntil: 'networkidle0'
});

Überprüfen Sie abschließend immer Ihre Proxys, um sicherzustellen, dass sie funktionsfähig sind:

async function validateProxy(proxyConfig) {
    try {
        const response = await fetch('https://api.ipify.org?format=json', {
            proxy: `http://${proxyConfig.host}:${proxyConfig.port}`
        });
        return response.ok;
    } catch (error) {
        console.error(`Proxy validation failed: ${error.message}`);
        return false;
    }
}

Tipps zur Proxy-Leistung

Möchten Sie Puppeteer optimal nutzen? Diese Tipps helfen Ihnen, Ihr Proxy-Setup zu optimieren und die Gesamtleistung zu verbessern.

Geschwindigkeitstests und -optimierung

Verkürzen Sie die Ladezeiten, indem Sie unnötige Anfragen wie Bilder, Schriftarten und Stylesheets blockieren:

await page.setRequestInterception(true);
page.on('request', (req) => {
    if (req.resourceType() === 'stylesheet' || req.resourceType() === 'font' || req.resourceType() === 'image') {
        req.abort();
    } else {
        req.continue();
    }
});

Paar page.goto mit page.waitForSelector für eine schnellere Navigation:

await page.goto(url, {
    timeout: 30000,
    waitUntil: 'domcontentloaded'
});
await page.waitForSelector('.main-content');

„Denken Sie bei der Optimierung von Puppeteer daran, dass es nur eine begrenzte Anzahl von Möglichkeiten gibt, die Start-/Herunterfahrleistung von Puppeteer selbst zu beschleunigen. Die größten Vorteile erzielen Sie wahrscheinlich durch eine schnellere Darstellung Ihrer Zielseiten.“
– Jon Yongfook, Gründer, Bannerbär

Proxy-Lastverteilung

Verteilen Sie den Datenverkehr mithilfe von Puppeteer Cluster auf mehrere Proxys:

const proxyCluster = {
    async distributeLoad(urls, proxyList) {
        const cluster = await Cluster.launch({
            concurrency: Cluster.CONCURRENCY_CONTEXT,
            maxConcurrency: 5
        });

        await cluster.task(async ({ page, data: url }) => {
            const proxy = proxyList.getNext();
            await page.authenticate(proxy);
            await page.goto(url);
        });
    }
};

Dieser Ansatz gleicht den Datenverkehr über die Proxys aus und ergänzt frühere Rotationsmethoden, um die Überlastung einzelner Proxys zu vermeiden.

Häufige Probleme und Lösungen

Hier sind einige häufige Herausforderungen und wie man sie effektiv bewältigt:

  • Netzwerk-Latenz Verwenden Sie den folgenden Code, um Timeouts zu verwalten und unnötige Verzögerungen zu vermeiden:
    const performRequest = async (page, url) => {
        try {
            await page.goto(url, {
                timeout: 30000,
                waitUntil: 'networkidle2'
            });
        } catch (error) {
            if (error.name === 'TimeoutError') {
                await page.evaluate(() => window.stop());
                return handleTimeout();
            }
            throw error;
        }
    };
    
  • Rate Limiting Erkennen und reagieren Sie mit diesem Snippet auf Ratenbegrenzungen:
    const checkRateLimit = async (response) => {
        if (response.status() === 429 || response.headers()['retry-after']) {
            await handleRateLimit(response.headers()['retry-after']);
        }
    };
    
  • Authentifizierungsfehler Behandeln Sie Proxy-Authentifizierungsfehler, indem Sie es mit neuen Anmeldeinformationen erneut versuchen:
    const handleAuthError = async (response, page, proxy) => {
        if (response.status() === 407) {
            await retryWithNewCredentials(page, proxy);
            return true;
        }
        return false;
    };
    

„Durch die Optimierung Ihres Puppeteer-Skripts können Sie einen reibungslosen und effizienten Betrieb mit genauen und konsistenten Ergebnissen sicherstellen.“
- ScrapeOps

Behalten Sie die Antwortzeiten und Erfolgsraten im Auge, um sicherzustellen, dass Ihre Proxys effizient und unentdeckt bleiben.

Schlussfolgerung

Wichtige Konfigurationsmethoden

Das Einrichten von Puppeteer mit Proxys umfasst einige wichtige Schritte. Für private Proxys verwenden Sie die authenticate Funktion zum Bereitstellen von Anmeldeinformationen:

await page.authenticate({
    username: 'proxyUser',
    password: 'proxyPass'
});

Um sicherzustellen, dass die Seite vollständig geladen wird, verwenden Sie die waitUntil Wahlmöglichkeit (z. 'networkidle2') und legen Sie ein Timeout fest (z. B. 30 Sekunden):

await page.goto(url, {
    waitUntil: 'networkidle2',
    timeout: 30000
});

Diese Konfigurationen bilden die Grundlage für ein zuverlässiges Proxy-Setup.

Praxisbeispiele

Um einen sicheren und effizienten Proxy-Betrieb aufrechtzuerhalten, befolgen Sie diese Strategien:

Verbindungsmanagement

  • Passen Sie Timeouts basierend auf der Proxy-Geschwindigkeit an.
  • Behandeln Sie Authentifizierungsfehler effektiv.
  • Überwachen Sie Leistungsmetriken, um Engpässe zu identifizieren.

Sicherheitsoptimierung

  • Wechseln Sie Benutzeragenten zusammen mit Proxys, um eine Erkennung zu vermeiden.
  • Fügen Sie für zusätzlichen Schutz eine VPN-Ebene hinzu.
  • Fangen Sie unnötige Anfragen ab und filtern Sie sie, um Bandbreite zu sparen.

Hier ist eine kurze Zusammenfassung wichtiger Überlegungen zur Proxy-Implementierung:

Aspekt Umsetzung Vorteile
Authentifizierung Wasser authenticate Funktion Sichert den Zugriff auf private Proxys
Lastmanagement Anforderungsabfang aktivieren Reduziert die Bandbreite und beschleunigt das Laden
Fehlerbehandlung Implementierung try-catch Blöcke Bewältigt Verbindungsprobleme elegant
Identitätsschutz Rotieren Sie Proxys und Benutzeragenten Verbessert die Erfolgsquote und vermeidet Blockaden

Zusammenhängende Artikel

Verwandte Blogs

Anwendungsfall

Unterstützt von