
Benutzerdefinierter Selenium-Chromedriver | Null-Konfiguration | Umgeht ALLE Bot-Schutzsysteme (wie Distil / Imperva/ Datadadome / CloudFlare IUAM)
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 automatisch die Treiber-Binärdatei herunter und patcht sie.
pip install undetected-chromedriver
oder , wenn du dich abenteuerlustig fühlst, installiere direkt über github```
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
Ich werde dem Issue-Tracker Grenzen setzen. Er wurde zu lange missbraucht.
Irgendwelche guten Nachrichten?
Ja, ich habe Undetected-Discussions eröffnet, wovon ich denke, dass es uns auf lange Sicht helfen wird.
DIESES PAKET VERBIRGT NICHT, und ich wiederhole, VERBIRGT NICHT deine IP-Adresse. Wenn du also von einem Rechenzentrum aus arbeitest (auch von kleineren), ist die Wahrscheinlichkeit groß, dass du nicht durchkommst! Auch wenn dein IP-Ruf zu Hause schlecht ist, wirst du nicht durchkommen!
Ausführen des folgenden Codes von zu Hause und von einem Rechenzentrum aus.```python import undetected_chromedriver as uc driver = uc.Chrome(headless=True,use_subprocess=False) driver.get('https://nowsecure.nl') driver.save_screenshot('nowsecure.png')
<div style="display:flex;flex-direction:row">
<img src="https://assets.kitploit.com/production/public/readmes/50956/c1bde1e3621f106c2504cf4ecb9cc9015b23340c7a9bd5f20364c27016b2dd40/4f02747809c3b183c8af8238f6858540057402adfe0f26d4fa9d646091fa5781-display-v1.webp" width="720"/>
<img src="https://assets.kitploit.com/production/public/readmes/50956/ac44f4c3d408a07f4a0b96b2eb37ecc58f3a9711f32b31a642c27e96ad2ab767/c94f4da9c540b7890c9350605f085bddc730ed40073c886ff94a2475bdfe806a-display-v1.webp" width="720"/>
</div>
<!--  -->
<!--  -->
## 3.5.0 ##
- selenium 4.10 hat einige Probleme verursacht. 3.5.0 ist kompatibel und hat selenium 4.9 oder höher festgepinnt. Ich kann <4.9 nicht mehr unterstützen.
- Einige kwargs aus dem Konstruktor entfernt: service_args, service_creationflags, service_log_path.
- find_elements_recursive-Generatorfunktion hinzugefügt. Das ist eher eine Komfortfunktion, da viele Websites scheinbar unterschiedliche Inhalte aus unterschiedlichen Frames ausliefern, was die Nutzung von find_elements erschwert.
## 3.4.5 ##
- Was für eine Woche. Ich dachte, ich hätte mit 3.4.0 die jüngsten Fortschritte bei Automatisierungserkennungsalgorithmen geknackt, aber offenbar verursachte das bei einigen Betriebssystemen einen Fehler bei der Interaktion mit Elementen. Ich musste auf eine andere Methode zurückgreifen, Fehler beheben, und konnte schließlich doch an der ursprünglichen Idee festhalten (+ Fehlerbehebungen).
- Das Update auf chrome 110 brachte eine weitere Überraschung, diesmal für HEADLESS-Benutzer.
- Obwohl headless offiziell nicht unterstützt wird, habe ich es gepatcht!
- Ich freue mich, bekannt zu geben, dass es jetzt EBENFALLS UNERKANNT ist (aber weiterhin nicht unterstützt ;))
- Besonderer Dank geht an [@mdmintz](https://github.com/mdmintz) und [@abdulzain6](https://github.com/abdulzain6)
- ebenfalls besonderer Dank an [@sebdelsol](https://github.com/sebdelsol) für seine Hilfe im Issues-Bereich, die er völlig freiwillig geleistet hat; du musst verrückt sein :)
### 3.4.0 ###
**Großes Update! Sei vorsichtig, denn es könnte -potenziell- deinen Code brechen.**
* Den Anti-Erkennungsmechanismus neu geschrieben: Anstatt Variablen zu entfernen und umzubenennen, behalten wir sie einfach, verhindern aber, dass sie von vornherein injiziert werden. Das hält uns zumindest in naher Zukunft von der Erkennung fern.
* Die Dateibenennung neu geschrieben, um zu verhindern, dass wir am Ende 1000 {randomstring}_chromedriver.exe's haben; stattdessen heißt es einfach undetected_chromedriver.exe
* Aufräumen: entfernte compat-, v2-Dateien und den tests-Ordner
### 3.2.0 ###
* Ein Beispiel hinzugefügt, das typischen Webdriver-Code, Antworten auf häufig gestellte Fragen, Fallstricke + einige Tricks enthält, um die Notwendigkeit von Multithreading zu umgehen.
### [>>>> Beispielcode hier <<<<](https://github.com/ultrafunkamsterdam/undetected-chromedriver/blob/master/example/example.py)
* Die Methode WebElement.click_safe() hinzugefügt, die du ausprobieren kannst, falls du nach dem Klicken auf einen Link erkannt wirst. Sie funktioniert nicht garantiert.
* WebElement.children(self, tag=None, recursive=False) hinzugefügt,
um einfach Kindknoten zu erhalten/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, auf das ich Leute verweisen kann, wenn sie alberne 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 Systeme hinzugefügt, die als linux2 gemeldet werden
* etwas Refactoring
### 3.1.6 ###
### weiterhin stark ###
- use_subprocess ist jetzt standardmäßig True. Zu viele Leute verstehen Multiprocessing und __name__ == '__main__' nicht, und nach Tests scheint es in chrome 104+ keinen Unterschied mehr zu machen.
- no_sandbox hinzugefügt, das standardmäßig True ist, und das ohne die nervige Leiste "Sie verwenden eine unsichere Befehlszeile ...".
- [Docker-Image](https://hub.docker.com/r/ultrafunk/undetected-chromedriver) aktualisiert. Du kannst dich jetzt per vnc oder rdp in deinen Container einwählen, um das tatsächliche Browserfenster zu sehen.
[](https://i.imgur.com/W7vriN9.mp4)
- natürlich funktioniert der „normale“ Modus auch
[](https://i.imgur.com/2qSNyuK.mp4)
### 3.1.0 ###
**diese Version `könnte` deinen Code brechen, teste vor dem Update!**
- **neue Anti-Erkennungslogik hinzugefügt!**
- v2 ist nun das Hauptmodul, sodass keine Verweise auf v2 mehr nötig sind. Das bedeutet, du kannst jetzt einfach Folgendes verwenden: ```python
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 als Alias auf das Hauptmodul gesetzt.