https://github.com/ultrafunkamsterdam/undetected-chromedriver
Optimierter Selenium Chromedriver-Patch, der keine Anti-Bot-Dienste wie Distill Network / Imperva / DataDome / Botprotect.io auslöst. Lädt die Treiberbinärdatei automatisch herunter und patcht sie.
pip install undetected-chromedriver
Oder, wenn Sie abenteuerlustig sind, installieren Sie es direkt über Github
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
Ich werde den Issue-Tracker einschränken. Es wurde zu lange missbraucht.
Gibt es gute Neuigkeiten?
Ja, ich habe Undetected-Discussions geöffnet, was uns meiner Meinung nach auf lange Sicht besser helfen wird.
DIESES PAKET verbirgt Ihre IP-Adresse NICHT, und ich wiederhole, es verbirgt NICHT Ihre IP-Adresse. Wenn Sie also von einem Rechenzentrum (auch kleineren) aus laufen, ist die Wahrscheinlichkeit groß, dass Sie nicht bestehen! Auch wenn Ihre IP-Reputation zu Hause niedrig ist, werden Sie nicht bestehen!
Führen Sie den folgenden Code von zu Hause und von einem Rechenzentrum aus aus.
import undetected_chromedriver as uc
driver = uc . Chrome ( headless = True , use_subprocess = False )
driver . get ( 'https://nowsecure.nl' )
driver . save_screenshot ( 'nowsecure.png' )
Großes Update! Seien Sie vorsichtig, da dies möglicherweise Ihren Code beschädigen könnte.
Wir haben den Anti-Erkennungsmechanismus neu geschrieben, anstatt Variablen zu entfernen und umzubenennen. Wir behalten sie einfach bei, verhindern aber, dass sie überhaupt eingefügt werden. Dies wird uns zumindest für die nahe Zukunft vor einer Entdeckung schützen.
Die Dateibenennung wurde umgeschrieben, um zu verhindern, dass am Ende 1000 {randomstring}_chromedriver.exe stehen. Stattdessen heißt sie einfach undetected_chromedriver.exe
Durch die Bereinigung wurden die Kompatibilitäts-, V2-Dateien und der Testordner entfernt
WebElement.click_safe()-Methode hinzugefügt, die Sie ausprobieren können, falls Sie nach dem Klicken auf einen Link erkannt werden. Es ist nicht garantiert, dass dies funktioniert.
WebElement.children(self, tag=None, recursive=False) hinzugefügt, um untergeordnete Knoten einfach abzurufen/zu finden. Beispiel:
body = driver.find_element('tag name', 'body')
# get the 6th child (any tag) of body, and grab all img's within (recursive).
images = body.children()[6].children('img', True)
srcs = list(map(lambda _:_.attrs.get('src'), images))
example.py hinzugefügt, wo ich Leute darauf hinweisen kann, wenn sie dumme Fragen stellen (nein, es ist eigentlich ziemlich cool, jeder sollte es sehen)
Unterstützung für die Lambda-Plattform hinzugefügt
Unterstützung für x86_32 hinzugefügt
Unterstützung für Systemberichte als Linux2 hinzugefügt
einige Umgestaltungen
use_subprocess ist jetzt standardmäßig auf „True“ eingestellt. Zu viele Leute verstehen Multiprocessing und name == ' main nicht, und nach dem Testen scheint es in Chrome 104+ keinen Unterschied mehr zu machen
no_sandbox hinzugefügt, das standardmäßig auf True eingestellt ist, und dies ohne die lästige Leiste „Sie verwenden eine unsichere Befehlszeile ...“.
Aktualisieren Sie das Docker-Image. Sie können jetzt VNC oder RDP in Ihren Container einbinden, um das tatsächliche Browserfenster anzuzeigen
Natürlich funktioniert auch der „normale“ Modus
Diese Version might
Ihren Code beschädigen. Testen Sie ihn vor dem Update!
Neue Anti-Erkennungslogik hinzugefügt!
v2 ist zum Hauptmodul geworden, daher sind keine Verweise auf v2 mehr erforderlich. Das bedeutet, dass Sie jetzt einfach Folgendes verwenden können:
import undetected_chromedriver as uc
driver = uc . Chrome ()
driver . get ( 'https://nowsecure.nl' )
Aus Gründen der Abwärtskompatibilität wird v2 nicht entfernt, sondern mit einem Alias auf das Hauptmodul verknüpft.
Das störende „Willkommensbildschirm“-Problem bei Nicht-Windows-Betriebssystemen wurde behoben. Für diejenigen Nagfetischisten, die Willkommensbildschirme lieben und Google mit noch mehr Daten versorgen, verwenden Sie Chrome(suppress_welcome=False).
ersetzte executable_path
im Konstruktor durch browser_executable_path
, der nicht verwendet werden sollte, es sei denn, Sie sind der Grenzfall (ja, das sind Sie), der Ihren benutzerdefinierten Chrome-Installationsordner nicht zu Ihrer PATH-Umgebungsvariablen hinzufügen kann oder über eine Armee verschiedener Browser/Versionen verfügt und die automatische Suche gibt den falschen Browser zurück
„v1“ (?) wurde vorerst nach _compat verschoben.
feste Abhängigkeitsversionen
Die benutzerdefinierte Behandlung von ChromeOptions wurde entfernt, sodass sie mit webdriver.chromium.options.ChromiumOptions
kompatibel ist.
Chrome.get() fu entfernt und auf „fast“ das Original zurückgesetzt:
with
-Anweisungen mehr erforderlich, obwohl es aus Gründen der Abwärtskompatibilität weiterhin funktioniert.Bisheriger Testerfolg: 100 %
Um es nur ein anderes Mal zu erwähnen, da manche Leute Schwierigkeiten beim Lesen haben: Headless ist immer noch in Arbeit. Es ist unnötig, Probleme anzusprechen
Ändern Sie das Verhalten bei der Prozesserstellung, sodass es vollständig losgelöst ist
Die .get(URL)-Methode wurde geändert, um immer den Kontextmanager zu verwenden
Die Methode .get(url) wurde geändert, um cdp unter der Haube zu verwenden.
... die with
Anweisung ist nicht mehr notwendig ..
ToDo: Auf Asynchronisierung und Selenium 4 hinarbeiten
Wann immer Sie auf die Entmutigten stoßen
from session not created: This version of ChromeDriver only supports Chrome version 96 # or what ever version
Die Lösung ist einfach:
import undetected_chromedriver as uc
driver = uc . Chrome ( version_main = 95 )
Juli 2021: Derzeit mit der Implementierung von Selenium 4 für Undetected-Chromedriver beschäftigt
Kurznachricht: #255
Bitte beachten Sie den wichtigen Hinweis am Ende dieses Dokuments, um unnötiges Scherzen und Problemaufwerfen zu vermeiden.
Im wahrsten Sinne des Wortes ist das alles, was Sie tun müssen. Die Einstellungen sind enthalten und die ausführbare Datei Ihres Browsers wird automatisch gefunden. Dies ist auch der Snippet, den ich empfehle, falls ein Problem auftritt.
import undetected_chromedriver as uc
driver = uc . Chrome ()
driver . get ( 'https://nowsecure.nl' ) # my own test test site with max anti-bot protection
Im wahrsten Sinne des Wortes ist das alles, was Sie tun müssen. Wenn ein angegebener Ordner nicht vorhanden ist, wird ein NEUES Profil erstellt. Auf diese Weise angegebene Datenverzeichnisse werden beim Beenden nicht automatisch entfernt.
import undetected_chromedriver as uc
options = uc . ChromeOptions ()
# setting profile
options . user_data_dir = "c: \ temp \ profile"
# use specific (older) version
driver = uc . Chrome (
options = options , version_main = 94
) # version_main allows to specify your chrome version instead of following chrome global version
driver . get ( 'https://nowsecure.nl' ) # my own test test site with max anti-bot protection
Im wahrsten Sinne des Wortes ist das alles, was Sie tun müssen. Sie können jetzt das Low-Level-Devtools-Protokoll anhören und abonnieren. Ich habe erst kürzlich herausgefunden, dass auch die zukünftige Veröffentlichung des offiziellen Chrome-Treibers geplant ist. Allerdings habe ich vorerst mein eigenes implementiert. Da ich es selbst zur Untersuchung brauchte.