Latenknoten

Überwindung von CAPTCHA in Puppeteer-Skripten: Von reCAPTCHA zu Erkennungsdiensten

Lernen Sie effektive Strategien zum Umgehen von CAPTCHAs in Puppeteer-Skripten kennen, einschließlich Stealth-Techniken und Lösungsmethoden für eine bessere Automatisierung.

RaianRaian
Überwindung von CAPTCHA in Puppeteer-Skripten: Von reCAPTCHA zu Erkennungsdiensten

CAPTCHAs sind dazu gedacht, Bots zu blockieren, wodurch die Automatisierung mit Tools wie Puppenspieler herausfordernd. Dieser Artikel erklärt, wie man CAPTCHA-Probleme umgeht, von Stealth-Techniken bis hin zu Lösungsmethoden. Folgendes lernen Sie:

  • Arten von CAPTCHAs: Textbasiert, bildbasiert, reCAPTCHA, hCAPTCHA, und Audio-CAPTCHAs.
  • Erkennung vermeiden: Verwenden Sie Puppeteer-Extra-Stealth-Plugins, verwalten Sie Browser-Fingerabdrücke und simulieren Sie menschliches Verhalten (Tippen, Mausbewegungen, Scrollen).
  • CAPTCHAs lösen: Integrieren Sie Dienste wie 2Captcha oder verwenden Sie OCR-Tools wie Tesseract für Bild-CAPTCHAs.
  • Verbesserung der Erfolgsraten: Rotieren Sie IPs, behandeln Sie Fehler mit Wiederholungsversuchen und optimieren Sie die Ressourcennutzung.

Schneller Vergleich der CAPTCHA-Typen

CAPTCHA-TypBeschreibungChallenges
TextbasiertVerzerrter Text zur ErkennungSchwer lesbarer komplexer Text
BildbasiertObjekte/Muster identifizierenErfordert visuelle Verarbeitung
reCAPTCHAGoogles RisikoanalysesystemErkennt botähnliches Verhalten
hCAPTCHAAufgaben zur ObjektidentifizierungÄhnlich wie reCAPTCHA
AudioTonbasierte AufgabenKomplexe Spracherkennung

Erfahren Sie, wie Sie mit diesen Methoden die Automatisierung optimieren, gleichzeitig eine Erkennung vermeiden und CAPTCHAs effizient lösen können.

Wie man umgehen kann reCAPTCHA und Puppenspieler und Headless ...

Methoden zur Verhinderung der Bot-Erkennung

Um CAPTCHA-Herausforderungen effektiv zu umgehen, müssen Puppeteer-Skripte das Verhalten echter menschlicher Benutzer nachahmen. Dazu gehören Stealth-Techniken und natürliche Verhaltensmuster.

Einrichten von Puppeteer-extra Stealth

Die Verwendung von puppeteer-extra Mit seinem Stealth-Plugin kann Bot-Erkennung verhindert werden. So richten Sie es ein:

<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>)
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>)
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>())

Sie können auch bestimmte Ausweichtechniken aktivieren:

puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>({
  <span class="hljs-attr">enabledEvasions</span>: <span class="hljs-keyword">new</span> <span class="hljs-title class_">Set</span>([
    <span class="hljs-string">"chrome.app"</span>,
    <span class="hljs-string">"chrome.csi"</span>,
    <span class="hljs-string">"defaultArgs"</span>,
    <span class="hljs-string">"navigator.plugins"</span>
  ])
}))

Das Stealth-Plugin bekämpft gängige Erkennungsmethoden durch:

  • Entferne den navigator.webdriver Resorts
  • Anzeigen für Headless Chrome ausblenden
  • Hinzufügen von Chrome-App- und CSI-Objekten
  • Browser-Fingerabdrücke anpassen

Browser-Fingerabdruckverwaltung

Browser-Fingerprinting ist ein Schlüsselfaktor bei der Bot-Erkennung. Um ein überzeugendes Browserprofil zu erstellen, konzentrieren Sie sich auf diese Bereiche:

KonfigurationsbereichImplementierungsdetailsZweck
User AgentSaiten dynamisch rotierenBlendet Automatisierungsmarkierungen aus
WebGL-UnterstützungHardwarebeschleunigung aktivierenImitiert ein Standard-Browser-Setup
AnsichtsfenstereinstellungenVerwenden Sie zufällige, realistische AbmessungenEntspricht gängigen Benutzerkonfigurationen
SprachheaderAn das Gebietsschema des Benutzeragenten anpassenStellt die Konsistenz im Browserprofil sicher

Zusätzlich zu statischen Konfigurationen ist die Einbeziehung dynamischer, menschenähnlicher Verhaltensweisen von entscheidender Bedeutung.

Simulation menschlichen Verhaltens

Die Simulation menschlichen Verhaltens trägt dazu bei, das Erkennungsrisiko zu verringern. Hier sind einige effektive Techniken:

  • Tippmuster
    Führen Sie zufällige Verzögerungen zwischen den Tastenanschlägen ein (z. B. 50 ms bis 200 ms), um die natürliche Tippgeschwindigkeit nachzuahmen und automatisierte Eingabemuster zu vermeiden.
  • Mausbewegung
    Verwenden Sie nichtlineare Mauspfade mit unterschiedlichen Geschwindigkeiten. Kleine, zufällige Abweichungen können menschliche Unvollkommenheiten bei der Cursorsteuerung nachbilden.
  • Seiteninteraktion
    Simulieren Sie realistisches Scrollen mit variablen Geschwindigkeiten und Pausen. Durch zufällige Anpassungen des Ansichtsfensters können Sie Lese- oder Scanverhalten emulieren.

Starten Sie abschließend den Browser mit Argumenten, die die Bot-Erkennung reduzieren:

<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
  <span class="hljs-attr">args</span>: [
    <span class="hljs-string">'--disable-blink-features=AutomationControlled'</span>,
    <span class="hljs-string">'--window-size=1920,1080'</span>
  ],
  <span class="hljs-attr">headless</span>: <span class="hljs-literal">false</span>
})

reCAPTCHA mit Puppeteer lösen

Sobald Stealth-Maßnahmen implementiert sind, ist die effiziente Handhabung von reCAPTCHA für eine zuverlässige Automatisierung unerlässlich. Dies baut auf den zuvor besprochenen Stealth- und Verhaltenssimulationstechniken auf.

Verwenden von CAPTCHA-Lösungsdiensten

Eine Möglichkeit, reCAPTCHA programmgesteuert zu verarbeiten, ist die Integration von CAPTCHA-Lösungsdiensten. Wenn Ihr Skript auf ein reCAPTCHA stößt, sendet es die erforderlichen Parameter an einen Solver-Dienst. Der Dienst verarbeitet das CAPTCHA und gibt die Lösung in der Regel innerhalb von 10–30 Sekunden zurück.

Einrichten 2Captcha API mit Puppeteer

2Captcha ist ein häufig verwendeter Dienst zum Lösen von reCAPTCHAs. So können Sie ihn in Ihr Puppeteer-Setup integrieren:

<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>)
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>)
<span class="hljs-keyword">const</span> path = <span class="hljs-built_in">require</span>(<span class="hljs-string">'path'</span>)

<span class="hljs-comment">// Configure solver extension</span>
<span class="hljs-keyword">const</span> extensionPath = path.<span class="hljs-title function_">join</span>(__dirname, <span class="hljs-string">'./2captcha-solver'</span>)
<span class="hljs-keyword">const</span> apiKey = <span class="hljs-string">'YOUR_2CAPTCHA_API_KEY'</span>

<span class="hljs-comment">// Launch browser with the solver extension</span>
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
    <span class="hljs-attr">args</span>: [
        <span class="hljs-string">`--disable-extensions-except=<span class="hljs-subst">${extensionPath}</span>`</span>,
        <span class="hljs-string">`--load-extension=<span class="hljs-subst">${extensionPath}</span>`</span>
    ],
    <span class="hljs-attr">headless</span>: <span class="hljs-literal">false</span>
})

Sobald der Browser eingerichtet ist, können Sie den Status des CAPTCHA-Solvers überprüfen:

<span class="hljs-comment">// Wait for solver button and check status</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForSelector</span>(<span class="hljs-string">'.captcha-solver'</span>)
<span class="hljs-keyword">const</span> solverButton = <span class="hljs-keyword">await</span> page.$(<span class="hljs-string">'.captcha-solver'</span>)
<span class="hljs-keyword">const</span> state = <span class="hljs-keyword">await</span> solverButton.<span class="hljs-title function_">getAttribute</span>(<span class="hljs-string">'data-state'</span>)

<span class="hljs-comment">// Proceed when solved</span>
<span class="hljs-keyword">if</span> (state === <span class="hljs-string">'solved'</span>) {
    <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">click</span>(<span class="hljs-string">'#submit-form'</span>)
}

Tipps zur Verbesserung der ReCAPTCHA-Erfolgsraten

Um die Chancen zu verbessern, reCAPTCHAs effektiv zu lösen, befolgen Sie diese Vorgehensweisen:

  • Verwenden Sie einen Pool von Residential-Proxys, um IP-Adressen zu rotieren.
  • Fügen Sie zwischen den Lösungsversuchen kurze Verzögerungen ein, um das natürliche Benutzerverhalten zu simulieren.
  • Schließen Sie die Fehlerbehandlung mit Wiederholungsversuchen mit exponentiellem Backoff ein.
  • Behalten Sie den Browserkontext über alle Versuche hinweg bei, um unnötige Neuinitialisierungen zu vermeiden.

So können Sie die Fehlerbehandlung in Ihren CAPTCHA-Lösungsprozess integrieren:

<span class="hljs-keyword">const</span> <span class="hljs-title function_">solveCaptcha</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page, maxRetries = <span class="hljs-number">3</span></span>) => {
    <span class="hljs-keyword">let</span> attempts = <span class="hljs-number">0</span>
    <span class="hljs-keyword">while</span> (attempts < maxRetries) {
        <span class="hljs-keyword">try</span> {
            <span class="hljs-comment">// Attempt CAPTCHA solution</span>
            <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">click</span>(<span class="hljs-string">'.captcha-solver'</span>)
            <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForSelector</span>(<span class="hljs-string">'[data-state="solved"]'</span>)
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>
        } <span class="hljs-keyword">catch</span> (error) {
            attempts++
            <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(<span class="hljs-number">2000</span> * attempts)
        }
    }
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>
}

Eine Fallstudie aus DataScrape-Lösungen unterstreicht die Wirksamkeit dieser Methoden. Im März 2024 erreichte der Einsatz von 2Captcha mit Puppeteer eine 95%ige Reduzierung der manuellen CAPTCHA-Lösungszeit und steigerte die Datenextraktionsraten um 60% bei der Verarbeitung von über 1 Million CAPTCHAs monatlich. [2]..

sbb-itb-23997f1

Bild-CAPTCHA-Erkennungsmethoden

Bild-CAPTCHAs sind darauf ausgelegt, automatisierte Systeme herauszufordern. Mit den richtigen Tools können OCR- und Bildverarbeitungstechniken diese Rätsel jedoch effektiv lösen.

Arten von Bild-CAPTCHAs

  • Textbasierte Bilder: Dazu gehören verzerrte Zeichen mit unterschiedlichen Schriftarten und komplexen Hintergründen.
  • Objekterkennung: Dabei geht es darum, bestimmte Objekte aus einer Reihe von Optionen zu identifizieren.
  • Musterabgleich: Erfordert, dass Benutzer visuelle Muster zuordnen oder identifizieren.

Lassen Sie uns nun in OCR-Methoden eintauchen, die speziell für textbasierte CAPTCHAs entwickelt wurden.

Verwenden von OCR für CAPTCHA-Text

Tesseract OCR ist ein leistungsstarkes Tool zur Texterkennung in Bildern. Nachfolgend finden Sie ein Beispiel für die Integration von Tesseract OCR mit Puppeteer zur Lösung textbasierter CAPTCHAs:

<span class="hljs-keyword">const</span> tesseract = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-tesseract-ocr'</span>)
<span class="hljs-keyword">const</span> sharp = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sharp'</span>)

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">solveCaptcha</span>(<span class="hljs-params">imageBuffer</span>) {
    <span class="hljs-comment">// Preprocess the image to improve OCR performance</span>
    <span class="hljs-keyword">const</span> processedImage = <span class="hljs-keyword">await</span> <span class="hljs-title function_">sharp</span>(imageBuffer)
        .<span class="hljs-title function_">grayscale</span>()
        .<span class="hljs-title function_">threshold</span>(<span class="hljs-number">150</span>)
        .<span class="hljs-title function_">toBuffer</span>()

    <span class="hljs-keyword">const</span> config = {
        <span class="hljs-attr">lang</span>: <span class="hljs-string">"eng"</span>,
        <span class="hljs-attr">oem</span>: <span class="hljs-number">1</span>,
        <span class="hljs-attr">psm</span>: <span class="hljs-number">7</span>,
    }

    <span class="hljs-keyword">return</span> <span class="hljs-keyword">await</span> tesseract.<span class="hljs-title function_">recognize</span>(processedImage, config)
}

Die Feinabstimmung der Bildeigenschaften während der Vorverarbeitung spielt eine entscheidende Rolle bei der Steigerung der Erkennungsgenauigkeit.

Verbesserung der Bilderkennungsgenauigkeit

Durch die Verbesserung von Kontrast und Helligkeit können die OCR-Ergebnisse deutlich verbessert werden. Hier ist ein Beispiel für die dynamische Anpassung dieser Einstellungen:

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">enhanceCaptchaRecognition</span>(<span class="hljs-params">page</span>) {
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">evaluate</span>(<span class="hljs-function">() =></span> {
        <span class="hljs-keyword">const</span> img = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'.captcha-image'</span>)
        <span class="hljs-keyword">const</span> canvas = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">createElement</span>(<span class="hljs-string">'canvas'</span>)
        <span class="hljs-keyword">const</span> ctx = canvas.<span class="hljs-title function_">getContext</span>(<span class="hljs-string">'2d'</span>)

        ctx.<span class="hljs-property">filter</span> = <span class="hljs-string">'contrast(150%) brightness(120%)'</span>
        ctx.<span class="hljs-title function_">drawImage</span>(img, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>)

        <span class="hljs-keyword">return</span> canvas.<span class="hljs-title function_">toDataURL</span>()
    })
}

Beispielsweise erreichte ein Projekt, das auf die taiwanesische Bahnbuchungswebsite abzielte, eine Genauigkeit von 98.84 % für einzelne Ziffern und eine Gesamtgenauigkeit von 91.13 %. [1].Ebenso haben sich Deep-Learning-Methoden für bildbasierte CAPTCHAs als effektiv erwiesen. Ein TensorFlow-basiertes Modell, das ein Convolutional Neural Network nutzt, erreichte eine Erfolgsquote von 90 %. [1].. Durch Experimentieren mit Vorverarbeitungstechniken – wie dem Optimieren von Kontrast, Helligkeit und Schwellenwerten – können die Ergebnisse basierend auf den spezifischen Merkmalen jedes CAPTCHA-Typs weiter verbessert werden.

CAPTCHA-Skriptleistung

Die Erstellung zuverlässiger CAPTCHA-Lösungsskripte erfordert eine effektive Fehlerbehandlung, IP-Rotation und Leistungsoptimierungen. Sobald Sie CAPTCHA-Lösungstechniken eingerichtet haben, liegt der nächste Schritt in der Skripteffizienz.

Fehlerbehebungssysteme

Eine gute Fehlerbehandlung ist der Schlüssel zur Stabilität Ihres Skripts. Hier ist ein Beispiel, das den Vorgang bei einem Fehler wiederholt:

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">handleCaptchaSolution</span>(<span class="hljs-params">page</span>) {
    <span class="hljs-keyword">const</span> <span class="hljs-variable constant_">MAX_RETRIES</span> = <span class="hljs-number">3</span>;
    <span class="hljs-keyword">let</span> attempts = <span class="hljs-number">0</span>;

    <span class="hljs-keyword">while</span> (attempts < <span class="hljs-variable constant_">MAX_RETRIES</span>) {
        <span class="hljs-keyword">try</span> {
            <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setDefaultNavigationTimeout</span>(<span class="hljs-number">30000</span>);
            <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> <span class="hljs-title function_">solveCaptcha</span>(page);
            <span class="hljs-keyword">return</span> result;
        } <span class="hljs-keyword">catch</span> (error) {
            <span class="hljs-keyword">if</span> (error <span class="hljs-keyword">instanceof</span> <span class="hljs-title class_">TimeoutError</span>) {
                <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">`Attempt <span class="hljs-subst">${attempts + <span class="hljs-number">1</span>}</span>: CAPTCHA timeout`</span>);
            } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (error <span class="hljs-keyword">instanceof</span> <span class="hljs-title class_">NetworkError</span>) {
                <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">`Attempt <span class="hljs-subst">${attempts + <span class="hljs-number">1</span>}</span>: Network failure`</span>);
            }
            attempts++;
            <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(<span class="hljs-number">2000</span> * attempts);
        }
    }
    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">'Maximum retry attempts exceeded'</span>);
}

Dieser Ansatz behandelt Timeouts und Netzwerkprobleme mit inkrementellen Wiederholungsversuchen und stellt sicher, dass Ihr Skript nicht unerwartet abstürzt.

IP- und Browserrotation

Rotierende IP-Adressen und Browser-Fingerabdrücke helfen, eine Erkennung zu vermeiden. So können Sie Puppeteer-Extra-Plugins zu diesem Zweck verwenden:

<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">AnonymizeUAPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-anonymize-ua'</span>);

puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">AnonymizeUAPlugin</span>());

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">rotateIdentity</span>(<span class="hljs-params"></span>) {
    <span class="hljs-keyword">const</span> proxy = <span class="hljs-keyword">await</span> <span class="hljs-title function_">getNextProxy</span>(); <span class="hljs-comment">// Your proxy rotation logic</span>
    <span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
        <span class="hljs-attr">args</span>: [<span class="hljs-string">`--proxy-server=<span class="hljs-subst">${proxy.host}</span>:<span class="hljs-subst">${proxy.port}</span>`</span>]
    });
    <span class="hljs-keyword">return</span> browser;
}

Durch die Rotation von IPs und HTTP-Headern ahmt Ihr Skript das natürliche Browserverhalten nach und verringert so die Wahrscheinlichkeit, markiert zu werden.

Leistungsoptimierung

Steigern Sie die Effizienz und Erfolgsquote Ihres Skripts mit den folgenden Techniken:

  • Ressourcenmanagement
    Stoppen Sie unnötige Ressourcendownloads wie Bilder, Stylesheets oder Schriftarten:
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setRequestInterception</span>(<span class="hljs-literal">true</span>);
page.<span class="hljs-title function_">on</span>(<span class="hljs-string">'request'</span>, <span class="hljs-function">(<span class="hljs-params">request</span>) =></span> {
    <span class="hljs-keyword">if</span> ([<span class="hljs-string">'image'</span>, <span class="hljs-string">'stylesheet'</span>, <span class="hljs-string">'font'</span>].<span class="hljs-title function_">includes</span>(request.<span class="hljs-title function_">resourceType</span>())) {
        request.<span class="hljs-title function_">abort</span>();
    } <span class="hljs-keyword">else</span> {
        request.<span class="hljs-title function_">continue</span>();
    }
});
  • Parallelverarbeitung
    Verwenden Sie Puppeteer-Cluster, um mehrere CAPTCHAs gleichzeitig zu lösen:
<span class="hljs-keyword">const</span> { <span class="hljs-title class_">Cluster</span> } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-cluster'</span>);

<span class="hljs-keyword">const</span> cluster = <span class="hljs-keyword">await</span> <span class="hljs-title class_">Cluster</span>.<span class="hljs-title function_">launch</span>({
    <span class="hljs-attr">concurrency</span>: <span class="hljs-title class_">Cluster</span>.<span class="hljs-property">CONCURRENCY_CONTEXT</span>,
    <span class="hljs-attr">maxConcurrency</span>: <span class="hljs-number">4</span>,
    <span class="hljs-attr">monitor</span>: <span class="hljs-literal">true</span>
});

<span class="hljs-keyword">await</span> cluster.<span class="hljs-title function_">task</span>(<span class="hljs-title function_">async</span> ({ page, <span class="hljs-attr">data</span>: url }) => {
    <span class="hljs-keyword">await</span> <span class="hljs-title function_">handleCaptchaSolution</span>(page);
});
  • Caching-Strategie
    Cachen Sie Antworten, um redundante Anfragen zu vermeiden und Verarbeitungszeit zu sparen:
<span class="hljs-keyword">const</span> cache = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Map</span>();

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">getCachedResponse</span>(<span class="hljs-params">url</span>) {
    <span class="hljs-keyword">if</span> (cache.<span class="hljs-title function_">has</span>(url)) {
        <span class="hljs-keyword">const</span> { timestamp, data } = cache.<span class="hljs-title function_">get</span>(url);
        <span class="hljs-keyword">if</span> (<span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>() - timestamp < <span class="hljs-number">3600000</span>) { <span class="hljs-comment">// 1-hour cache</span>
            <span class="hljs-keyword">return</span> data;
        }
    }
    <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> <span class="hljs-title function_">fetchResponse</span>(url);
    cache.<span class="hljs-title function_">set</span>(url, { <span class="hljs-attr">timestamp</span>: <span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>(), <span class="hljs-attr">data</span>: response });
    <span class="hljs-keyword">return</span> response;
}

Diese Methoden arbeiten zusammen, um die Ressourcennutzung zu reduzieren, die Geschwindigkeit zu verbessern und mehrere Aufgaben effizient zu bewältigen.

Fazit und Implementierungsleitfaden

CAPTCHA-Lösungsübersicht

Der effektive Umgang mit CAPTCHAs erfordert eine mehrschichtige Strategie, die auf Prävention ausgerichtet ist. Durch den Einsatz von Stealth-Techniken, optimierten Headern und rotierenden IPs können Sie die Wahrscheinlichkeit verringern, dass CAPTCHAs überhaupt ausgelöst werden. Prävention ist immer besser als reaktives Lösen.

Latenknoten Browser-Automatisierung

Latenode vereinfacht die CAPTCHA-Verwaltung mit integrierten Funktionen wie Stealth-Modus, Proxy-Rotation und Cookie-Verarbeitung.

Hier ist ein Beispiel, wie Sie es einrichten können:

<span class="hljs-keyword">const</span> workflow = <span class="hljs-keyword">new</span> <span class="hljs-title class_">LatenodeWorkflow</span>({ <span class="hljs-attr">browserOptions</span>: { <span class="hljs-attr">stealth</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">proxyRotation</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">cookieManagement</span>: <span class="hljs-literal">true</span> } });

<span class="hljs-keyword">await</span> workflow.<span class="hljs-title function_">initBrowser</span>({ <span class="hljs-attr">captchaHandling</span>: { <span class="hljs-attr">prevention</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">autoRetry</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">maxAttempts</span>: <span class="hljs-number">3</span> } });

Nächste Schritte zur Umsetzung

Um Ihren Automatisierungs-Workflow zu verbessern, sollten Sie die folgenden Schritte in Betracht ziehen:

  • Aktivieren Sie den Stealth-Modus
    Verwenden Sie Puppeteer-Extra-Stealth-Plugins, um die Wahrscheinlichkeit des Auslösens von CAPTCHAs zu verringern.
  • Einrichten der Fehlerbehebung
    Fügen Sie Fehlerbehebungsmechanismen hinzu, um verschiedene CAPTCHA-Typen zu verarbeiten. Nutzen Sie automatische Wiederholungsversuche mit Strategien wie exponentiellem Backoff für einen reibungsloseren Betrieb.
  • Verbessern Sie die Ressourceneffizienz
    Reduzieren Sie die Ausführungszeit von Skripts, indem Sie Ressourcen selektiv laden und Caching verwenden. So erzielen Sie eine bessere Leistung, ohne die Erfolgsraten zu beeinträchtigen.

Ähnliche Artikel

Raian

Forscher, Nocode-Experte

Autorendetails →