Zurück zum Blog
Anleitungen
Mihnea-Octavian ManolacheLast updated on Mar 31, 20268 min read

Schritt für Schritt: So umgehen Sie Cloudflare und optimieren Ihre Web-Scraping-Aktivitäten

Schritt für Schritt: So umgehen Sie Cloudflare und optimieren Ihre Web-Scraping-Aktivitäten

Heutzutage ist Web-Scraping zu einer echten Herausforderung geworden. Wenn Sie schon einmal einen Web-Scraper mit einem Headless-Browser entwickelt haben, sind Sie mit Sicherheit auf einige Anti-Bot-Systeme gestoßen. Und Cloudflare, Datadome oder andere Anti-Bot-Anbieter zu umgehen, ist keine leichte Aufgabe. Sie müssen sich zunächst Umgehungsstrategien überlegen und diese dann in der Produktion umsetzen. Und selbst dann kann es Szenarien geben, die Sie nie berücksichtigt haben.

Ohne zumindest eine minimale Implementierung dieser Umgehungstechniken ist die Wahrscheinlichkeit jedoch sehr hoch, dass Sie entdeckt und blockiert werden. Deshalb ist das Thema des heutigen Artikels, wie man die Erkennung durch Cloudflare umgeht. Und die meisten der Techniken, die wir besprechen werden, gelten auch für andere Anbieter von Erkennungssystemen. Als Beispiel konzentrieren wir uns auf Selenium, um zu sehen, ob wir es unauffällig machen können. Im Laufe des Artikels werde ich unter anderem folgende Punkte behandeln:

  • Methoden zur Bot-Erkennung
  • Allgemeine Anti-Bot-Umgehungstechniken
  • Fortgeschrittene Umgehungsstrategien für Selenium

Wie erkennt Cloudflare Headless-Browser?

Cloudflare ist ein Technologieunternehmen mit einem riesigen Netzwerk. Der Schwerpunkt liegt auf Diensten wie CDN, DNS und verschiedenen Online-Sicherheitssystemen. Die Web Application Firewall des Unternehmens ist in der Regel darauf ausgelegt, vor Angriffen wie DDoS oder Cross-Site-Scripting zu schützen. In den letzten Jahren hat Cloudflare – ebenso wie andere Anbieter in diesem Bereich – Fingerprinting-Systeme eingeführt, die in der Lage sind, Headless-Browser zu erkennen. Wie Sie sich vielleicht denken können, ist Selenium eines der ersten Programme, das von diesen Techniken betroffen ist. Und da die Web-Scraping-Branche stark auf diese Technologie angewiesen ist, sind auch Scraper direkt betroffen.

Bevor wir uns den Anti-Bot-Techniken zuwenden, halte ich es für 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-Driver fehlen. Die `navigator`-Schnittstelle in einem Browser verfügt sogar über eine Eigenschaft namens `webdriver`, die angibt, ob ein Browser durch Automatisierung gesteuert wird. Und das ist ein sofortiger Hinweis. Wenn Sie damit experimentieren möchten:

  • Öffnen Sie die Entwicklertools Ihres Browsers
  • Navigieren Sie zur Konsole
  • Geben Sie den folgenden Befehl ein: `navigator.webdriver`

In Ihrem Fall sollte `false` zurückgegeben werden. Wenn Sie es jedoch mit Puppeteer oder Selenium versuchen, erhalten Sie `true`. Falls Sie sich fragen, wie Cloudflare dies nutzt, um Bots zu erkennen: Nun, es ist ziemlich einfach. Sie müssen lediglich ein Skript wie das untenstehende auf die Website ihres Partners einfügen:

// 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')

Natürlich gibt es in der Praxis noch viele weitere Erkennungsstufen, die diese Anbieter nutzen. Sogar die Bildschirmgröße, das Tastaturlayout oder die vom Browser verwendeten Plugins werden genutzt, um einen Browser eindeutig zu identifizieren. Wenn Sie daran interessiert sind, wie browserlose Erkennung funktioniert, schauen Sie sich meinen einfachen Service-Worker-Test an. Und das gilt nur, wenn Sie sich auf den Browser beschränken. Sie können Bot-Aktivitäten auch erkennen, indem Sie die IP-Adresse überprüfen, von der die Anfrage stammt. Wenn Sie beispielsweise IP-Adressen von Rechenzentren verwenden, steigt die Wahrscheinlichkeit, dass Sie blockiert werden, mit jeder Anfrage. Deshalb wird empfohlen, bei der Entwicklung eines Web-Scrapers Proxy-Adressen von Privathaushalten oder Internetdienstanbietern zu verwenden.

Wie man Cloudflare mit Selenium umgeht

Glücklicherweise ist die Web-Scraping-Community sehr aktiv. Und da eine solche Nachfrage nach Möglichkeiten besteht, Cloudflare und andere Anti-Bot-Anbieter zu umgehen, gibt es Open-Source-Lösungen in diesem Bereich. Wenn Programmier-Communities zusammenarbeiten, lassen sich großartige Dinge erreichen! Für die Zukunft schlage ich vor, dass wir folgende Schritte befolgen:

  • Führen Sie einige Tests durch, um zu prüfen, ob das Standard-Selenium Cloudflare umgehen kann
  • Fügen wir einige zusätzliche Umgehungsmaßnahmen hinzu, um unsere Skripte unauffälliger zu machen

Beginnen wir also mit unserem ersten Schritt:

#1: Kann das Standard-Selenium Cloudflare umgehen?

Ich bin nicht der Typ, der Vermutungen anstellt. Und das vor allem, weil wir nicht genau wissen, wie Cloudflare-Systeme funktionieren. Sie verwenden alle möglichen Verschleierungstechniken in ihrem Code, was das Reverse Engineering erschwert. Deshalb habe ich im Laufe 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 erstellen und sehen, wie er sich auf einem echten, durch Cloudflare geschützten Ziel verhält.

1.1. Einrichten der Umgebung

Bei Python ist es am besten, unsere Projekte in einem einzigen Verzeichnis zu isolieren. Erstellen wir also einen neuen Ordner, öffnen wir ein Terminalfenster und wechseln wir dorthin:

# Create a new virtual environment and activate it

~ » python3 -m venv env && source env/bin/activate

# Install dependencies

~ » python3 -m pip install selenium

# Create a new .py file and open the project inside your IDE

~ » touch app.py && code .

1.2. Erstellen eines einfachen Web-Scrapers mit Selenium

Nachdem Sie Ihr Projekt erfolgreich eingerichtet haben, ist es an der Zeit, etwas Code hinzuzufügen. Wir werden hier nichts Ausgefallenes erstellen. Wir benötigen dieses Skript lediglich zu Testzwecken. Wenn Sie mehr über fortgeschrittenes Scraping erfahren möchten, sehen Sie sich dieses [LINK](AICI TREBUIE POSTAT ARTICOLUL) Tutorial zu Pyppeteer an.

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

# Set Chrome to open in headless mode

options = Options()

options.headless = True

# Create a new Chrome instance and navigate to target

driver = webdriver.Chrome(options=options)

driver.get('https://www.snipesusa.com/')

# Give it some time to load

time.sleep(10)

# Take screenshot of page

driver.get_screenshot_as_file('screenshot.png')

# Close browser

driver.quit()

Schauen Sie sich nun den Screenshot an. Hier ist das Ergebnis:

Ich denke, wir können mit Sicherheit sagen, dass der Test fehlgeschlagen ist. Die Zielwebsite wird von Cloudflare geschützt und wie du sehen kannst, werden wir blockiert. Standardmäßig ist Selenium also nicht in der Lage, Cloudflare zu umgehen. Ich werde nicht weiter ins Detail gehen und andere Anbieter von Bot-Erkennung überprüfen. Wenn du weiter testen möchtest, findest du hier einige Ziele und ihre Anbieter:

#2: Kann Stealthy Selenium Cloudflare umgehen?

Zunächst möchte ich die Begriffe klären. Mit „Stealth Selenium“ meine ich eine Version von Selenium, die unentdeckt bleibt und Cloudflare umgehen kann. Ich beziehe mich dabei nicht auf eine bestimmte Tarntechnik. Es gibt verschiedene Möglichkeiten, Umgehungstechniken in Selenium zu implementieren. Es gibt Pakete, die dies übernehmen, oder Sie können den Befehl `execute_cdp_cmd` verwenden, um direkt mit der Chrome-API zu interagieren. Letzteres bietet Ihnen mehr Kontrolle, erfordert aber mehr Aufwand. Hier ist ein Beispiel, wie Sie damit den Wert des User-Agents ändern könnten:

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"

       })

Sie müssten jedoch CDP durchgehen und die APIs identifizieren, die es Ihnen ermöglichen, alle notwendigen Änderungen vorzunehmen. Testen wir also vorerst mit einigen Paketen.

1.1. Stealthy Selenium

Es gibt mindestens zwei Pakete, mit denen Sie Selenium „stealthy“ machen können. Bis jetzt ist jedoch bei keinem davon garantiert, dass es Cloudflare umgeht. Auch hier müssen wir testen, ob eines davon funktioniert. Schauen wir uns zunächst einmal `selenium-stealth` an. Dieses Paket ist ein Wrapper um `puppeteer-extra-plugin-stealth` und ermöglicht es, die Umgehungsmechanismen von Puppeteer mit Python-Selenium zu nutzen. Um es zu verwenden, müssen Sie es zunächst installieren. Öffnen Sie ein Terminalfenster und geben Sie diesen Befehl ein:

# Install selenium-stealth

~ » python3 -m pip install selenium-stealth

Jetzt sind Sie startklar. Wir können es nutzen, um unseren vorherigen Scraper unauffälliger zu machen:

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

from selenium_stealth import stealth

import time

# Set Chrome to open in headless mode

options = Options()

options.headless = True

# Create a new Chrome instance

driver = webdriver.Chrome(options=options)

# Apply stealth to your webdriver

stealth(driver,

   languages=["en-US", "en"],

   vendor="Google Inc.",

   platform="Win32",

   webgl_vendor="Intel Inc.",

   renderer="Intel Iris OpenGL Engine",

   fix_hairline=True,

)

# Navigate to target

driver.get('https://www.snipesusa.com/')

# Give it some time to load

time.sleep(10)

# Take screenshot of page

driver.get_screenshot_as_file('stealth.png')

# Close browser

driver.quit()

Die Ausführung des Skripts lieferte mir diesmal ein anderes Ergebnis als die Standard-Selenium-Einstellungen:

Die zweite Option, die Sie verwenden können, ist `undetected_chromedriver`. Diese wird als „optimierter Selenium-Chromedriver“ beschrieben. Probieren wir es aus:

# Install undetected_chromedriver

~ » python3 -m pip install undetected_chromedriver

Der Code ist unserem Standard-Skript sehr ähnlich. Der Hauptunterschied liegt im Paketnamen. Hier ist ein einfacher Scraper mit `undetected_chromedriver` – mal sehen, ob er Cloudflare umgehen kann:

import undetected_chromedriver as uc

import time

# Set Chrome to open in headless mode

options = uc.ChromeOptions()

options.headless = True

# Create a new Chrome instance and maximize the window

driver = uc.Chrome(options=options, executable_path='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')

driver.maximize_window()

# Navigate to target

driver.get('https://www.snipesusa.com/')

# Give it some time to load

time.sleep(10)

# Take screenshot of page

driver.get_screenshot_as_file('stealth-uc.png')

# Close browser

driver.quit()

Wieder einmal läuft das Skript bei mir einwandfrei. Es scheint, dass zumindest diese beiden Pakete den Cloudflare-Schutz erfolgreich umgehen können. Zumindest kurzfristig. Um ehrlich zu sein, ist die Wahrscheinlichkeit groß, dass Cloudflare Ihre IP-Adresse aufspürt und sperrt, wenn Sie diese Skripte ausgiebig nutzen.

Lassen Sie mich Ihnen daher eine dritte Option vorstellen: die Web-Scraping-API.

1.2. Selenium mit Web Scraping API

Die Web Scraping API verfügt über diese erstaunliche Funktion namens Proxy-Modus. Mehr darüber können Sie hier lesen. Was ich hier jedoch hervorheben möchte, ist, dass sich unser Proxy-Modus erfolgreich in Selenium integrieren lässt. Auf diese Weise erhalten Sie Zugriff auf alle Umgehungsfunktionen, die wir implementiert haben. Und ich möchte Ihnen versichern, dass wir ein engagiertes Team haben, das an maßgeschneiderten Umgehungstechniken arbeitet. Technisch gesehen kümmern wir uns um IP-Rotationen, nutzen verschiedene Proxys, lösen Captchas und verwenden die Chrome-API, um unseren Fingerabdruck kontinuierlich zu ändern. In nicht-technischer Sprache bedeutet das: weniger Aufwand für Sie und eine höhere Erfolgsquote. Sie erhalten im Grunde die unauffälligste Version von Selenium, die es gibt. Und so funktioniert es:

# Install selenium-wire

~ » python3 -m pip install selenium-wire


Wir verwenden `selenium-wire`, um Selenium mit einem Proxy zu nutzen. Hier ist 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 kommen noch Umgehungstechniken hinzu. Darum müssen Sie sich nicht einmal kümmern. Wir kümmern uns um die Umgehung von Cloudflare, damit Sie sich mehr auf die Auswertung der Daten konzentrieren können.

Fazit

Wenn Sie einen Scraper entwickeln möchten, der Cloudflare umgehen kann, müssen Sie viele Dinge berücksichtigen. Selbst ein engagiertes Team, das rund um die Uhr arbeitet, kann nicht garantieren, dass die Umgehungsmaßnahmen jedes Mal funktionieren. Denn mit jeder neuen Browserversion besteht die Möglichkeit, dass der API neue Funktionen hinzugefügt werden. Und einige dieser Funktionen können dazu genutzt werden, Bots zu identifizieren und aufzuspüren.

Ich würde sogar sagen, dass der beste Browser, um Cloudflare und andere Anbieter zu umgehen, der ist, den Sie selbst entwickeln. Und wir haben einen bei Web Scraping API entwickelt. Jetzt teilen wir ihn mit Ihnen. Viel Spaß beim Scraping!

Über den Autor
Mihnea-Octavian Manolache, Full-Stack-Entwickler @ WebScrapingAPI
Mihnea-Octavian ManolacheFull-Stack-Entwickler

Mihnea-Octavian Manolache ist Full-Stack- und DevOps-Entwickler bei WebScrapingAPI. Er entwickelt Produktfunktionen und sorgt für die Wartung der Infrastruktur, die den reibungslosen Betrieb der Plattform gewährleistet.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.