Press-and-Hold-CAPTCHAs: Warum Sie Erscheinen und Wie Man Damit Umgeht
Du schickst eine ganz normale Anfrage, bekommst einen 200 zurück, und statt der gewünschten Seite erscheint ein graues Kästchen mit einem Button, auf dem “Gedrückt halten” steht. Kein Bildraster, kein “Wähle die Ampeln aus”, nur ein Button, den du ein paar Sekunden gedrückt halten musst. Dein Scraper weiß nichts damit anzufangen, also bleibt er hängen oder liefert eine leere Seite.
Diese Art von Challenge hat sich schnell über E-Commerce-, Reise- und Content-Seiten verbreitet. Sie sieht einfacher aus als die alten Bild-CAPTCHAs, und genau das ist der Punkt. Sie testet nicht, ob du einen Fußgängerüberweg erkennst. Sie testet, ob das, was den Button drückt, sich wie eine menschliche Hand auf einem echten Gerät verhält. Dieser Leitfaden erklärt, was die Challenge tatsächlich misst, warum sie auslöst und wie du von der Client-Seite mit Open-Source-Werkzeugen damit umgehst.
Was ein Press-and-Hold-CAPTCHA Wirklich Ist
Ein Press-and-Hold-CAPTCHA ist eine JavaScript-Challenge, die auf einer Blockseite ausgeliefert wird. Wenn ein Anti-Bot-System entscheidet, dass deine Sitzung riskant aussieht, hört es auf, den echten Inhalt auszuliefern, und schickt stattdessen diese Zwischenseite. Der Button ist nicht der Test. Der Button ist der Mechanismus, der den Test überbringt.
Während du den Button gedrückt hältst, sammelt ein Skript auf der Seite einen Strom von Telemetriedaten:
- Zeigerkoordinaten über die Zeit und wie sie beim Halten abdriften.
- Druck und Timing der Mouse-down- und Mouse-up-Ereignisse.
- Mikrobewegungen, Zittern und Beschleunigungskurven.
- Geräte- und Browsersignale, die im Hintergrund erfasst werden (Bildschirm, Zeitzone, WebGL, Schriftarten und mehr).
Am Ende des Haltens bündelt das Skript all das in eine verschlüsselte Nutzlast und schickt sie zur Bewertung. Wenn das Profil menschlich wirkt, bekommst du ein Freigabe-Token und die Seite lädt. Wenn nicht, siehst du dieselbe Wand wieder, oder eine harte Sperre.
Es gibt also keine “Lösung” im klassischen Sinne. Es gibt einen Verhaltens-Fingerabdruck, der besteht oder durchfällt.
Warum die Challenge Überhaupt Auslöst
Die meisten versuchen, die Halte-Geste zu besiegen. Das ist das falsche Ende des Problems. Die Geste ist der letzte Schritt. Die Challenge erschien, weil etwas früher in deiner Sitzung deinen Vertrauenswert bereits gesenkt hatte.
Moderne Anti-Bot-Systeme weisen jeder Anfrage in Echtzeit einen Risikowert zu, der auf vielen Signalen gleichzeitig beruht. Sitzungen mit hohem Risiko werden herausgefordert oder blockiert. Sitzungen mit niedrigem Risiko gehen reibungslos durch und sehen den Button nie. Der zuverlässige Weg, mit einem Press-and-Hold-CAPTCHA umzugehen, ist, es gar nicht erst auszulösen.
Signale, die Deinen Wert Senken
Das sind die üblichen Gründe, warum eine Sitzung markiert wird, bevor überhaupt eine Geste verlangt wird:
- Rechenzentrums-IP-Adressen. Traffic aus Cloud-Bereichen (AWS, GCP, gängige VPS-Anbieter) ist trivial zu identifizieren und wird stark misstraut.
- Fingerabdruck-Widersprüche. Ein User-Agent, der Windows-Chrome behauptet, während der TLS-Handshake oder die navigator-Eigenschaften auf headless Linux hindeuten, ist ein klares Indiz. Die Schichten müssen übereinstimmen.
- Fehlende Browser-Tiefe. Rohe HTTP-Clients führen kein JavaScript aus, haben kein Canvas oder WebGL und können die Hintergrund-Prüfungen nicht beantworten. Dieses Fehlen ist selbst ein Signal.
- Unnatürliches Tempo. Fünfzig Anfragen pro Sekunde von einer Adresse, perfekt gleichmäßige Intervalle, keine Denkzeit. Menschen sind lauter als das.
- Wiederverwendete oder veraltete Signale. Derselbe Fingerabdruck, der einen Endpunkt bombardiert, oder Cookies, die nicht zum Gerät passen, das sie vorzeigt.
Behebe das, und der Button verschwindet oft. Das ist ein weit besseres Ergebnis, als gut im Halten zu werden.
Was Nach dem “Bestehen” Passiert
Angenommen, du bekommst ein Freigabe-Token. Zwei Dinge sind wissenswert.
Erstens ist das Token meist an den Kontext gebunden. Die Freigabe ist an die IP-Adresse und oft an den Fingerabdruck geknüpft, der sie verdient hat. Du kannst die Challenge nicht an einem Ort lösen und das Token von einem anderen aus wiederverwenden. Wenn du das Lösen an einen Drittanbieter-Dienst auslagerst, der auf einer anderen IP läuft, ist das zurückgegebene Token für deinen Scraper tot. Das Lösen muss an demselben Exit passieren, der die Folgeanfragen stellt.
Zweitens bedeutet einmaliges Bestehen nicht, dass dir für immer vertraut wird. Viele Systeme führen nach der Challenge fortlaufende Verhaltensprüfungen durch. Wenn sich der Cursor plötzlich in geraden, roboterhaften Linien bewegt oder der Anfragerhythmus mechanisch wird, wird die Sitzung mittendrin abgerissen. Das Tor zu passieren ist nicht dasselbe, wie unbeobachtet durch das Gebäude zu gehen.
Wie Man von der Client-Seite Damit Umgeht
Hier eine praktische Reihenfolge, das Günstigste und Wirkungsvollste zuerst.
1. Nutze Einen Echten Browser, Keinen Rohen Client
Eine Press-and-Hold-Challenge braucht JavaScript-Ausführung, Ereignisbehandlung und ein echtes DOM. requests und curl können nicht mitspielen. Steuere einen echten Browser mit Playwright, Selenium oder Puppeteer. Allein das erlaubt dir, die Hintergrund-Prüfungen zu beantworten, an denen ein Client ohne Browser standardmäßig scheitert.
2. Repariere den Fingerabdruck vor dem Verhalten
Ein standardmäßiger Headless-Browser verrät sich auf Dutzende kleine Arten als headless. Bevor du dich um Mauskurven kümmerst, lass den Browser wie einen normalen aussehen:
- Führe ihn mit Oberfläche (headful) aus oder nutze einen auf Tarnung ausgelegten Build, der die offensichtlichen Verräter wie
navigator.webdriverund Headless-Signale ausbessert. - Halte User-Agent, Plattform, Zeitzone, Sprache und Viewport untereinander konsistent.
- Mische keinen mobilen User-Agent mit einer Desktop-Bildschirmgröße oder eine US-Sprachregion mit einer europäischen Zeitzone.
Konsistenz zählt mehr als jeder Einzelwert. Ein glaubwürdiges, langweiliges Desktop-Profil schlägt ein exotisches mit einem Widerspruch darin.
3. Werde Langsamer und Bewege Dich Wie ein Mensch
Wenn du die Geste automatisierst, teleportiere den Cursor nicht zum Button und halte nicht jedes Mal exakt 2000 Millisekunden. Füge einen kurzen Annäherungsweg, eine leicht zufällige Haltedauer und natürliche Pausen zwischen Aktionen hinzu. Verhaltensklassifizierer suchen genau nach der maschinenperfekten Version dieser Aktion.
4. Halte Lösen und Anfragen Zusammen
Weil die Freigabe an die IP gebunden ist, führe den Browser, der die Challenge löst, über denselben Proxy-Exit aus, den du für die Folgeanfragen nutzen wirst. Residential- oder Mobil-IPs erregen weit weniger Verdacht als Rechenzentrumsbereiche, was verringert, wie oft die Challenge überhaupt auslöst. Wenn du IPs rotierst, rotiere den ganzen Kontext zusammen, nicht das Token über Kontexte hinweg.
5. Wisse, Wann Du Aufhören Solltest, Es von Hand zu Machen
Hier gibt es eine echte Obergrenze. Interaktive Challenges werden ständig nachjustiert, und Verhaltensmodelle werden laufend mit frischem Traffic aktualisiert. Ein Tarn-Setup, das diese Woche funktioniert, kann nächste Woche scheitern. Wenn du mehr Entwicklungszeit mit der Pflege der Umgehung verbringst als mit dem Bau deines eigentlichen Produkts, ist das das Signal, das Entsperren an einen Dienst abzugeben und zurück zu den Daten zu gehen.
Ein Minimales Playwright-Beispiel
Das zeigt die Form eines automatisierten Haltens. Es ist bewusst generisch. Wichtig ist die zufällige Annäherung und Dauer, kein magischer Bypass.
import random
import time
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://example.com/protected")
button = page.query_selector("#challenge-button")
if button:
box = button.bounding_box()
# Nähere dich dem Button, statt hinzuspringen.
page.mouse.move(box["x"] - 40, box["y"] - 25, steps=12)
page.mouse.move(
box["x"] + box["width"] / 2,
box["y"] + box["height"] / 2,
steps=8,
)
page.mouse.down()
time.sleep(random.uniform(2.4, 3.6)) # variiere das Halten
page.mouse.up()
page.wait_for_load_state("networkidle")
print(page.title())
browser.close()
Wenn die Challenge danach immer noch scheitert, ist das Problem fast nie das Halten. Es ist die IP oder der Fingerabdruck, markiert, bevor die Geste überhaupt läuft.
FAQ
Ist ein Press-and-Hold-CAPTCHA schwerer als ein Bild-CAPTCHA? Es ist mit einem Skript schwerer zu fälschen, weil es Verhalten und Gerätesignale bewertet statt Bilderkennung. Oft ist es leichter ganz zu vermeiden, weil es bei niedrigem Vertrauen auslöst, und du kannst deinen Wert anheben.
Kann ich dafür einen CAPTCHA-Lösungsdienst nutzen? Manchmal, aber beachte die Einschränkung: Das Freigabe-Token ist an die IP gebunden, die es gelöst hat. Ein Dienst, der auf seinen eigenen Servern löst, gibt dir ein Token, das dein Scraper nicht nutzen kann. Löse am selben Exit, von dem aus du scrapest.
Warum bekomme ich die Challenge auf manchen Seiten und auf anderen nicht? Detailseiten, Such-Endpunkte und Login-Abläufe sind meist aggressiver geschützt als statische Listenseiten. Dieselbe Seite kann zwei URLs völlig unterschiedlich behandeln, je nachdem, wie wertvoll und wie missbraucht jede ist.
Hilft es, meinen User-Agent zu rotieren? Für sich allein nein. 2026 scheitert ein rotierender User-Agent über einer Rechenzentrums-IP mit einem Headless-Fingerabdruck fast sofort. Die Signale müssen konsistent sein und die IP muss residential aussehen. Ein einzelnes Feld für sich bewegt den Wert nicht.
Abschließende Gedanken
Press-and-Hold-CAPTCHAs fühlen sich wie eine Wand an, die man erklimmen muss, aber eigentlich sind sie ein Symptom. Die Wand ging hoch, weil deine Sitzung automatisiert aussah, bevor du den Button überhaupt berührt hast. Stecke deine Mühe in ein sauberes, konsistentes Browserprofil, menschliches Tempo und vertrauenswürdige IPs, und die Challenge erscheint viel seltener. Und wenn sie erscheint, denk daran, dass die Freigabe an den Kontext gebunden ist, also löse und scrape vom selben Ort aus.
Wenn das Mithalten mit nachjustierten Challenges deine Roadmap auffrisst, ist das ein fairer Moment, die Arbeit abzugeben. ScrapeUnblocker übernimmt den Browser, den Fingerabdruck und die interaktiven Challenges für dich und gibt die gerenderte Seite zurück, damit du dich auf das Parsen konzentrieren kannst statt aufs Button-Halten. Wie es in eine Anfrage passt, siehst du in der Entwicklerdokumentation, und die Preise kannst du prüfen, wenn du es gegen die Kosten vergleichen willst, deinen eigenen Umgehungs-Stack zu pflegen.
ScrapeUnblocker kostenlos testen
Über 95 % Erfolgsquote · ab 0,55 € pro 1.000 Aufrufe · 500 kostenlose Anfragen bei der Registrierung.