Optimized selenium.webdriver.Chrome drop-in, to prevent being triggered by anti-bot services like Distil / CloudFlare / Imperva / DataDome and such. main classes: Chrome, ChromeOptions Please note: results may vary due to external factors and/or modus operandi. No guarantees are given, yet I can guarantee ongoing and tenacious efforts evading and handling detection algorithms. For more information check out the README.
Project description
undetected_chromedriver
https://github.com/ultrafunkamsterdam/undetected-chromedriver
Optimized Selenium Chromedriver patch which does not trigger anti-bot services like Distill Network / Imperva / DataDome / Botprotect.io Automatically downloads the driver binary and patches it.
- Tested on version 75,76,77,78,79,80,81,83,84,85,86
- patching also works on MS Edge (chromium-based) webdriver binary
- console logging is disabled by default. to enable: pass enable_console_log=True to the Chrome constructor
Installation
pip install undetected-chromedriver
Usage
To prevent unnecessary hair-pulling and issue-rasing, please mind the important note at the end of this document .
the easy way (recommended)
import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get('https://distilnetworks.com')
target specific chrome version
import undetected_chromedriver as uc
uc.TARGET_VERSION = 85
driver = uc.Chrome()
monkeypatch mode
Needs to be done before importing from selenium package
import undetected_chromedriver as uc
uc.install()
from selenium.webdriver import Chrome
driver = Chrome()
driver.get('https://distilnetworks.com')
the customized way
import undetected_chromedriver as uc
#specify chromedriver version to download and patch
uc.TARGET_VERSION = 78
# or specify your own chromedriver binary (why you would need this, i don't know)
undetected_chromedriver.install(
executable_path='c:/users/user1/chromedriver.exe',
)
opts = uc.ChromeOptions()
opts.add_argument(f'--proxy-server=socks5://127.0.0.1:9050')
driver = uc.Chrome(options=opts, enable_console_log=True)
driver.get('https://distilnetworks.com')
datadome.co example
These guys have actually a powerful product, and a link to this repo, which makes me wanna test their product. Make sure you use a "clean" ip for this one.
#
# STANDARD selenium Chromedriver
#
from selenium import webdriver
chrome = webdriver.Chrome()
chrome.get('https://datadome.co/customers-stories/toppreise-ends-web-scraping-and-content-theft-with-datadome/')
chrome.save_screenshot('datadome_regular_webdriver.png')
True # it caused my ip to be flagged, unfortunately
#
# UNDETECTED chromedriver (headless,even)
#
import undetected_chromedriver as uc
options = uc.ChromeOptions()
options.headless=True
options.add_argument('--headless')
chrome = uc.Chrome(options=options)
chrome.get('https://datadome.co/customers-stories/toppreise-ends-web-scraping-and-content-theft-with-datadome/')
chrome.save_screenshot('datadome_undetected_webddriver.png')
Check both saved screenhots here
important note
Due to the inner workings of the module, it is needed to browse programmatically (ie: using .get(url) ). Never use the gui to navigate. Using your keybord and mouse for navigation causes possible detection! New Tabs: same story. If you really need multi-tabs, then open the tab with the blank page (hint: url is data:,
including comma, and yes, driver accepts it) and do your thing as usual. If you follow these "rules" (actually its default behaviour), then you will have a great time for now.
TL;DR and for the visual-minded:
In [1]: import undetected_chromedriver as uc
In [2]: driver = uc.Chrome()
In [3]: driver.execute_script('return navigator.webdriver')
Out[3]: True # Detectable
In [4]: driver.get('https://distilnetworks.com') # starts magic
In [4]: driver.execute_script('return navigator.webdriver')
In [5]: None # Undetectable!
end important note
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file undetected-chromedriver-1.5.1.tar.gz
.
File metadata
- Download URL: undetected-chromedriver-1.5.1.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7334d772f3147902ae2d7ad48237e89f065b79c5268ee6e651635c2607defccf |
|
MD5 | 9eb81d2d4a993cedefa8052f1c0363d8 |
|
BLAKE2b-256 | 08a7518dafdd53ab936c51aa069a3e47db2f7c6d95c3aad2fa02c585a137d4cc |