explaingit

ultrafunkamsterdam/undetected-chromedriver

12,618PythonAudience · developerComplexity · 2/5Setup · easy

TLDR

A Python package that patches Selenium's ChromeDriver so bot-detection services like Cloudflare and DataDome cannot identify the browser as automated, installed with one pip command.

Mindmap

mindmap
  root((undetected-chromedriver))
    What it does
      Patch ChromeDriver
      Bypass bot detection
      JSON to binary
    Supported browsers
      Chrome standard
      Brave browser
      Other Chromium
    Features
      Auto version match
      Headless mode
      Docker and VNC
    Limitations
      No IP hiding
      Network signals exposed
    Requirements
      Python 3.6+
      Selenium 4.9+
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Scrape websites that block standard Selenium by patching ChromeDriver to look like a real browser session.

USE CASE 2

Run automated browser tests against sites with bot-detection without being blocked by fingerprinting checks.

USE CASE 3

Use headless Chrome for automation on services that detect and block headless browser signals.

USE CASE 4

Run browser automation in a Docker container with VNC support for remote viewing of the browser session.

Tech stack

PythonSeleniumChrome

Getting it running

Difficulty · easy Time to first run · 5min

Does not hide your IP address, data center IPs or low-reputation home IPs can still be blocked by bot-detection services.

In plain English

undetected-chromedriver is a Python package that modifies Selenium's ChromeDriver so websites cannot tell they are being accessed by an automated script. Many websites use bot-detection services such as Distil Network, Imperva, DataDome, and Cloudflare to block automated browsers. This package patches the ChromeDriver binary at startup so those detection systems see it as a normal browser session. Installation is a single pip command. The package automatically downloads the correct ChromeDriver version for your Chrome installation and applies the patch without any configuration needed. It works with standard Chrome as well as Brave and other Chromium-based browsers, though less common browsers may need manual tweaking. A common misconception is that the package hides your IP address. It does not. If you run automation from a data center or from a home connection with a low reputation score, bot-detection services can still block you based on your network origin alone. The package only addresses browser fingerprinting and driver-based signals, not network-level signals. The package supports headless mode (running without a visible browser window), though the authors describe it as unofficially supported. A Docker image is available for environments where running a visible browser is inconvenient, including a VNC option for viewing the browser remotely. Recent versions require Python 3.6 or higher and are compatible with Selenium 4.9 or above. Over its release history the library has updated its anti-detection method several times as Chrome and detection vendors evolved. Version 3.4.0 changed how it prevents detection-related variables from being injected in the first place, rather than just renaming them. Version 3.5.0 added compatibility with Selenium 4.9 and above. The full README is longer than what was shown.

Copy-paste prompts

Prompt 1
Show me a minimal Python script using undetected-chromedriver that opens a Cloudflare-protected website without being blocked.
Prompt 2
How do I use undetected-chromedriver in headless mode so no browser window appears while my script runs?
Prompt 3
How do I configure undetected-chromedriver to use Brave instead of Chrome as the browser?
Prompt 4
How do I run undetected-chromedriver inside a Docker container and connect to the browser session with VNC?
Prompt 5
Why is undetected-chromedriver still getting blocked even after installing it, what does it not protect against?
Open on GitHub → Explain another repo

← ultrafunkamsterdam on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.