Schritt für Schritt: So umgehen Sie Cloudflare und verbessern Ihre Web-Scraping-Bemühungen
Mihnea-Octavian Manolache am 22. Februar 2023

Heutzutage ist Web Scraping zu einer echten Herausforderung geworden. Wenn Sie jemals einen Web-Scraper mit einem Headless-Browser entwickelt haben, sind Sie mit Sicherheit auf einige Anti-Bot-Systeme gestoßen. Und Cloudflare, Datadome oder jeden anderen Anti-Bot-Anbieter zu umgehen, ist keine leichte Aufgabe. Man muss sich erst Umgehungsstrategien ausdenken und sie dann in der Produktion umsetzen. Und selbst dann könnte es Szenarien geben, die Sie nicht bedacht haben.
Doch ohne eine zumindest minimale Implementierung dieser Umgehungstechniken ist die Wahrscheinlichkeit, erwischt und blockiert zu werden, sehr hoch. Deshalb ist das Thema des heutigen Artikels, wie man die Cloudflare-Erkennung umgeht. Die meisten der Techniken, die wir besprechen werden, gelten auch für andere Erkennungsanbieter. Als Referenz werden wir uns auf Selenium konzentrieren, um zu sehen, ob wir es unauffällig machen können. Im Laufe des Artikels werde ich unter anderem Folgendes besprechen:
- Methoden zur Bot-Erkennung
- Allgemeine Anti-Bot-Umgehungstechniken
- Erweiterte Umgehungen für Selenium
Wie erkennt Cloudflare Headless-Browser?
Cloudflare ist ein technisches Unternehmen mit einem riesigen Netzwerk. Sie konzentrieren sich auf Dienste wie CDN, DNS und verschiedene Online-Sicherheitssysteme. Ihre Web Application Firewall ist in der Regel auf den Schutz vor Angriffen wie DDoS oder Cross Site Scripting ausgelegt. In den letzten Jahren haben Cloudflare und andere Anbieter in diesem Bereich Fingerprinting-Systeme eingeführt, die in der Lage sind, Headless-Browser zu erkennen. Wie Sie sich denken können, ist Selenium einer der ersten, die von diesen Techniken betroffen sind. Und da die Web-Scraping-Industrie stark auf diese Technologie angewiesen ist, sind auch Scraper direkt betroffen.
Bevor wir uns den Anti-Bot-Techniken zuwenden, ist es meiner Meinung nach wichtig zu erörtern, wie Cloudflare Selenium erkennt. Nun, das System kann sehr komplex sein. Zum Beispiel gibt es Eigenschaften in einem Browser, die einem Web-Treiber fehlen. Die `Navigator`-Schnittstelle in einem Browser hat sogar eine Eigenschaft namens `Webdriver`, die anzeigt, ob ein Browser durch Automatisierung gesteuert wird. Und das ist ein sofortiger Hinweis. Wenn Sie damit experimentieren wollen:
- Öffnen Sie die Entwicklertools Ihres Browsers
- Navigieren Sie zur Konsole
- Geben Sie den folgenden Befehl ein: navigator.webdriver".
In Ihrem Fall sollte es `false` zurückgeben. Aber wenn Sie es mit Puppeteer oder Selenium versuchen, erhalten Sie "true". Wenn Sie sich fragen, wie Cloudflare dies ausnutzt, um Bots zu erkennen, dann ist das ziemlich einfach. Alles, was sie tun müssen, ist, ein Skript wie das untenstehende auf der Website ihres Partners einzuschleusen:
// detection-script.js
const webdriver = navigator.webdriver
// If webdriver returns true, display a reCaptcha
// In this example, I am transferring the user to a Cloudflare challenge page.
// But you get the idea
if ( webdriver ) location.replace('https://cloudflarechallenge.com')
Im wirklichen Leben gibt es natürlich viel mehr Erkennungsstufen, die diese Anbieter verwenden. Sogar die Größe des Bildschirms, das Tastaturlayout oder die von den Browsern verwendeten Plugins werden verwendet, um einen spezifischen Fingerabdruck eines Browsers zu erstellen. Wenn Sie wissen möchten, wie die browserlose Erkennung funktioniert, sehen Sie sich meinen einfachen Service-Worker-Test an. Und das gilt nur, wenn Sie sich an den Browser halten. Sie können Bot-Aktivitäten auch erkennen, indem Sie sich die IP-Adresse ansehen, von der die Anfrage ausgeht. Wenn Sie z. B. IPs von Rechenzentren verwenden, steigt die Wahrscheinlichkeit, dass Ihre Anfrage blockiert wird, mit jeder Anfrage. Deshalb wird empfohlen, bei der Erstellung eines Web Scrapers Proxys für Privatpersonen oder ISPs zu verwenden.
Wie man Cloudflare mit Selenium umgeht
Glücklicherweise ist die Web-Scraping-Gemeinschaft sehr aktiv. Und weil die Nachfrage nach der Umgehung von Cloudflare und anderen Anti-Bot-Anbietern so groß ist, gibt es in diesem Bereich Open-Source-Lösungen. Wenn Programmiergemeinschaften zusammenarbeiten, kann Großes erreicht werden! Für die Zukunft schlage ich vor, dass wir diese Schritte befolgen:
- Führen Sie einige Tests durch, um zu sehen, ob Standard-Selenium Cloudflare umgehen kann
- Hinzufügen einiger zusätzlicher Ausweichmöglichkeiten, um unsere Skripte heimlicher zu machen
Lassen Sie uns also mit dem ersten Schritt beginnen:
#1: Kann Selenium standardmäßig Cloudflare umgehen?
Ich bin nicht der Typ, der Vermutungen anstellt. Das liegt vor allem daran, dass wir nicht mit Sicherheit wissen, wie die Cloudflare-Systeme funktionieren. Sie verwenden alle möglichen Arten von Verschleierungen in ihrem Code, was das Reverse Engineering erschwert. Deshalb habe ich in meiner Erfahrung als Entwickler gelernt, dass Testen der beste Weg ist, um zu verstehen, wie ein System funktioniert. Lassen Sie uns also einen einfachen Scraper bauen und sehen, wie er sich auf einem echten, von Cloudflare geschützten Ziel verhält.
1.1. Einrichten der Umgebung
Bei Python ist es am besten, wenn wir unsere Projekte in einem einzigen Verzeichnis isolieren. Legen wir also einen neuen Ordner an, öffnen ein Terminalfenster und navigieren dorthin:
# Erstelle eine neue virtuelle Umgebung und aktiviere sie
~ " python3 -m venv env && source env/bin/activate
# Installiere Abhängigkeiten
~ " python3 -m pip install selenium
# Erstelle eine neue .py Datei und öffne das Projekt in deiner IDE
~ " touch app.py && code .
1.2. Erstellen eines einfachen Web Scrapers mit Selenium
Nachdem Sie Ihr Projekt nun erfolgreich eingerichtet haben, ist es an der Zeit, etwas Code hinzuzufügen. Wir werden hier nichts Ausgefallenes bauen. Wir brauchen dieses Skript nur für Testzwecke. Wenn Sie mehr über fortgeschrittenes Scraping erfahren möchten, schauen Sie sich diesen[LINK](AICI TREBUIE POSTAT ARTICOLUL) Tutorial auf Pyppeteer.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Chrome so einstellen, dass es im Headless-Modus geöffnet wird
options = Options()
options.headless = True
# Eine neue Chrome-Instanz erstellen und zum Ziel navigieren
driver = webdriver.Chrome(options=options)
driver.get('https://www.snipesusa.com/')
# Etwas Zeit zum Laden geben
time.sleep(10)
# Screenshot der Seite machen
driver.get_screenshot_as_file('screenshot.png')
# Browser schließen
driver.quit()
Sehen Sie sich jetzt den Screenshot an. Hier ist, was ich bekommen habe:

Ich denke, wir können mit Sicherheit sagen, dass der Test fehlgeschlagen ist. Die Ziel-Website ist durch Cloudflare geschützt und wie Sie sehen können, werden wir blockiert. Selenium ist also standardmäßig nicht in der Lage, Cloudflare zu umgehen. Ich werde nicht in die Tiefe gehen und mit anderen Bot-Erkennungsanbietern prüfen. Wenn Sie weitere Tests durchführen möchten, finden Sie hier einige Ziele und deren Anbieter:

#2: Kann Stealthy Selenium Cloudflare umgehen?
Zunächst einmal möchte ich die Begriffe klären. Mit Stealth Selenium meine ich eine Version von Selenium, die unentdeckt bleiben und Cloudflare umgehen kann. Ich beziehe mich nicht auf eine bestimmte Tarnkappentechnik. Es gibt eine Reihe von Möglichkeiten, wie man Umgehungstechniken in Selenium implementieren kann. Es gibt Pakete, die sich damit befassen, oder Sie können die Funktion `execute_cdp_cmd` verwenden, um direkt mit der Chrome-API zu interagieren. Letzteres erlaubt Ihnen mehr Kontrolle, erfordert aber auch mehr Arbeit. Hier ist ein Beispiel dafür, wie Sie den Wert des Benutzeragenten ändern können:
driver.execute_cdp_cmd('Emulation.setUserAgentOverride', {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win32; x86) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
"platform": "Win32",
"acceptLanguage":"ro-RO"
})
Aber Sie müssten CDP durchgehen und die APIs identifizieren, mit denen Sie alle notwendigen Änderungen vornehmen können. Lassen Sie uns also erst einmal mit einigen Paketen testen.
1.1. Stealthy Selenium
Es gibt mindestens zwei Pakete, die Sie verwenden können, um Selenium unauffällig zu machen. Bis zu diesem Punkt ist jedoch keines von ihnen garantiert, dass es Cloudflare umgeht. Auch hier müssen wir testen und sehen, ob eines der beiden Pakete funktioniert. Zuallererst wollen wir uns `selenium-stealth` ansehen. Dieses Paket ist ein Wrapper um `puppeteer-extra-plugin-stealth`, der es ermöglicht, Puppeteers Umgehungen mit Python's Selenium zu verwenden. Um es zu benutzen, müssen Sie es zuerst installieren. Öffnen Sie ein Terminalfenster und geben Sie diesen Befehl ein:
# selenium-stealth installieren
~ " python3 -m pip install selenium-stealth
Jetzt ist alles bereit. Wir können sie verwenden, um unseren vorherigen Scraper heimlicher zu machen:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium_stealth import stealth
import time
# Chrome so einstellen, dass er im Headless-Modus geöffnet wird
options = Options()
options.headless = True
# Eine neue Chrome-Instanz erstellen
driver = webdriver.Chrome(options=options)
# Stealth auf Ihren Webdriver anwenden
stealth(driver,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
# Zum Ziel navigieren
driver.get('https://www.snipesusa.com/')
# Geben Sie der Seite etwas Zeit zum Laden
time.sleep(10)
# Machen Sie einen Screenshot der Seite
driver.get_screenshot_as_file('stealth.png')
# Schließen Sie den Browser
driver.quit()
Bei der Ausführung des Skripts habe ich diesmal ein anderes Ergebnis erhalten als bei den Standardeinstellungen von Selenium:

Die zweite Option, die Sie verwenden können, ist `undetected_chromedriver`. Dieser wird als "optimierter Selenium-Chromedriver" beschrieben. Testen wir ihn aus:
# Installiere undetected_chromedriver
~ " python3 -m pip install undetected_chromedriver
Der Code ist unserem Standardskript sehr ähnlich. Der Hauptunterschied besteht in dem Paketnamen. Hier ist ein einfacher Scraper mit `undetected_chromedriver` und wir werden sehen, ob er Cloudflare umgehen kann:
import undetected_chromedriver as uc
import time
# Chrome so einstellen, dass es im Headless-Modus geöffnet wird
options = uc.ChromeOptions()
options.headless = True
# Eine neue Chrome-Instanz erstellen und das Fenster maximieren
driver = uc.Chrome(options=options, executable_path='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')
driver.maximize_window()
# Zum Ziel navigieren
driver.get('https://www.snipesusa.com/')
# Etwas Zeit zum Laden geben
time.sleep(10)
# Screenshot der Seite machen
driver.get_screenshot_as_file('stealth-uc.png')
# Browser schließen
driver.quit()
Die Ausführung des Skripts hat wieder einmal gut geklappt. Es scheint, dass zumindest diese beiden Pakete den Cloudflare-Schutz erfolgreich umgehen können. Zumindest auf kurze Sicht. Um die Wahrheit zu sagen: Wenn Sie diese Skripte ausgiebig verwenden, wird Cloudflare Ihre IP-Adresse aufspüren und blockieren.
Deshalb möchte ich Ihnen eine dritte Möglichkeit vorstellen: Web Scraping API.
1.2. Selenium mit Web Scraping API
Web Scraping API hat diese erstaunliche Funktion namens Proxy-Modus. Sie können hier mehr darüber lesen. Aber was ich hier anmerken möchte, ist, dass unser Proxy-Modus erfolgreich mit Selenium integriert werden kann. Auf diese Weise erhalten Sie Zugang zu allen Umgehungsfunktionen, die wir implementiert haben. Und lassen Sie mich Ihnen sagen, dass wir ein engagiertes Team haben, das an benutzerdefinierten Umgehungstechniken arbeitet. Technisch gesehen arbeiten wir mit IP-Rotationen, wir verwenden verschiedene Proxys, wir lösen Captchas und wir verwenden die API von Chrome, um unseren Fingerabdruck ständig zu ändern. Untechnisch ausgedrückt bedeutet dies weniger Aufwand für Sie und eine höhere Erfolgsquote. Sie erhalten im Grunde die heimlichste Version von Selenium, die es gibt. Und so wird's gemacht:
# selenium-wire installieren
~ " python3 -m pip install selenium-wire
Wir benutzen `selenium-wire`, um Selenium mit einem Proxy zu benutzen. Hier ist nun das Skript:
from seleniumwire import webdriver
import time
# Method to encode parameters
def get_params(object):
params = ''
for key,value in object.items():
if list(object).index(key) < len(object) - 1:
params += f"{key}={value}."
else:
params += f"{key}={value}"
return params
# Your WSA API key
API_KEY = '<YOUR_API_KEY>'
# Default proxy mode parameters
PARAMETERS = {
"proxy_type":"datacenter",
"device":"desktop",
"render_js":1
}
# Set Selenium to use a proxy
options = {
'proxy': {
"http": f"http://webscrapingapi.{ get_params(PARAMETERS) }:{ API_KEY }@proxy.webscrapingapi.com:80",
}
}
# Create a new Chrome instance
driver = webdriver.Chrome(seleniumwire_options=options)
# Navigate to target
driver.get('https://www.httpbin.org/get')
# Retrieve the HTML documeent from the page
html = driver.page_source
print(html)
# Close browser
driver.quit()
Wenn Sie dieses Skript ein paar Mal ausführen, werden Sie sehen, wie sich die IP-Adresse jedes Mal ändert. Das ist unser IP-Rotationssystem. Im Hintergrund fügt es auch Umgehungstechniken hinzu. Um die müssen Sie sich nicht einmal kümmern. Wir kümmern uns um die Umgehung von Cloudflare, damit Sie sich mehr auf das Parsen der Daten konzentrieren können.
Schlussfolgerungen
Wenn Sie einen Scraper bauen wollen, der Cloudflare umgehen kann, müssen Sie eine Menge Dinge berücksichtigen. Ein engagiertes Team kann 24 Stunden am Tag und 7 Tage die Woche arbeiten und es gibt trotzdem keine Garantie, dass die Umgehungen jedes Mal funktionieren. Das liegt daran, dass mit jeder neuen Browserversion möglicherweise neue Funktionen zur API hinzugefügt werden. Und einige dieser Funktionen können verwendet werden, um Fingerabdrücke zu nehmen und Bots zu erkennen.
Ich würde sogar sagen, dass der beste Browser zur Umgehung von Cloudflare und anderen Anbietern der ist, den Sie selbst bauen. Und wir haben einen bei Web Scraping API gebaut. Jetzt teilen wir ihn mit Ihnen. Also viel Spaß beim Scraping!
Nachrichten und Aktualisierungen
Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Sammeln Sie mühelos Echtzeitdaten von Suchmaschinen mit der SERP Scraping API. Verbessern Sie Marktanalysen, SEO und Themenforschung mit Leichtigkeit. Legen Sie noch heute los!


Entdecken Sie die Komplexität des Scrapens von Amazon-Produktdaten mit unserem ausführlichen Leitfaden. Von Best Practices und Tools wie der Amazon Scraper API bis hin zu rechtlichen Aspekten erfahren Sie, wie Sie Herausforderungen meistern, CAPTCHAs umgehen und effizient wertvolle Erkenntnisse gewinnen.


Erfahren Sie, welcher Browser am besten geeignet ist, um Cloudflare-Erkennungssysteme beim Web-Scraping mit Selenium zu umgehen.
