CloakBrowser stealth fetcher plugin for changedetection.io.
Project description
changedetection.io-cloak-browser
Stealth browser fetcher plugin for changedetection.io powered by CloakBrowser.
- ✅ Bypasses Cloudflare Turnstile, reCAPTCHA v3, FingerprintJS, BrowserScan and more
- ✅ 33 source-level C++ patches compiled into Chromium — no JS injection tricks
- ✅ Full browser steps support (same Playwright page API)
- ✅ Full screenshot and visual selector support
- ✅ Drop-in replacement — select "CloakBrowser" per-watch in the UI
- ✅ Proxy support with optional geo-IP auto-detection
- ✅ Human-like behaviour mode to avoid timing-based detection
Requirements
- changedetection.io >= 0.54.5
- Python 3.10+
- ~200 MB disk space for the CloakBrowser Chromium binary (downloaded automatically on first run)
NOTE: - The biggest red-flag is still your IP address "quality", always use a high quality 'residential IP address' through a SOCKS style proxy - When you sign up using https://brightdata.grsm.io/n0r16zf7eivq BrightData will match any first deposit up to $150 .
Cloak Browser works by downloading a pre-compiled binary chrome-browser from CloakHQ, remember, you are running a black-box piece of software that you do not know what's inside of it.
Quick Start
1. Install the plugin
Docker (docker-compose.yml):
services:
changedetection:
environment:
- EXTRA_PACKAGES=changedetection.io-cloak-browser
Local install:
pip install changedetection.io-cloak-browser
# Download the Chromium binary
python -m cloakbrowser install
2. Select CloakBrowser for a watch
In the changedetection.io UI, open any watch → Edit → Fetch tab → choose "CloakBrowser - Stealth Chromium (anti-bot bypass)" from the fetcher dropdown.
3. (Optional) Configure via environment variables
| Variable | Default | Description |
|---|---|---|
CLOAKBROWSER_HUMANIZE |
true |
Enable human-like mouse/keyboard/scroll behaviour |
playwright_proxy_server |
(none) | Proxy URL, e.g. http://proxy:8080 |
playwright_proxy_username |
(none) | Proxy username |
playwright_proxy_password |
(none) | Proxy password |
PLAYWRIGHT_SERVICE_WORKERS |
allow |
allow or block service workers |
WEBDRIVER_DELAY_BEFORE_CONTENT_READY |
5 |
Seconds to wait after page load |
SCREENSHOT_MAX_HEIGHT |
20000 |
Maximum screenshot height in pixels |
Docker Compose Example
version: '3'
services:
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io:latest
container_name: changedetection
volumes:
- ./datastore:/datastore
environment:
- EXTRA_PACKAGES=changedetection.io-cloak-browser
- CLOAKBROWSER_HUMANIZE=true
# Optional proxy
# - playwright_proxy_server=http://proxy.example.com:8080
# - playwright_proxy_username=user
# - playwright_proxy_password=pass
ports:
- "5000:5000"
restart: unless-stopped
How It Works
CloakBrowser is a patched Chromium binary with 33 source-level C++ modifications that make it indistinguishable from a real user's Chrome browser. Unlike JavaScript-injection approaches (which detection services can identify), these patches operate at the binary level.
The Python cloakbrowser package wraps the Playwright Python library but connects to the
patched binary instead of stock Chromium. This means the page API is 100% identical to
Playwright — browser steps, screenshots, visual selectors, and JS execution all work
unchanged.
Detection bypass results
| Service | Stock Playwright | CloakBrowser |
|---|---|---|
| reCAPTCHA v3 score | 0.1 (bot) | 0.9 (human) |
| Cloudflare Turnstile | FAIL | PASS |
| FingerprintJS | DETECTED | PASS |
| BrowserScan | DETECTED | NORMAL |
navigator.webdriver |
true |
false |
| TLS fingerprint | Mismatch | Identical to Chrome |
Browser Steps
CloakBrowser fully supports all changedetection.io browser steps:
- Click element / Click element if exists
- Enter text in field
- Execute JS
- Wait for text / Wait for seconds
- Scroll down
- Check/uncheck checkbox
- Select by label
- Remove elements
- … and all others
This works because CloakBrowser pages are standard Playwright page objects — the browser steps engine requires no modification.
Troubleshooting
Plugin not loading?
from changedetectionio.pluggy_interface import plugin_manager
print([name for name, _ in plugin_manager.list_name_plugin()])
# Should include: cloak_browser
Binary not downloaded?
python -m cloakbrowser install
python -m cloakbrowser info
Test that the fetcher registers:
from changedetectionio.content_fetchers import available_fetchers
print(available_fetchers())
# Should include: ('html_cloakbrowser', 'CloakBrowser - Stealth Chromium (anti-bot bypass)')
Check for CloakBrowser updates:
python -m cloakbrowser update
License
MIT License — see LICENSE.
CloakBrowser binary: free-to-use, no redistribution. See CloakBrowser BINARY-LICENSE.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file changedetection_io_cloak_browser-0.1.1.tar.gz.
File metadata
- Download URL: changedetection_io_cloak_browser-0.1.1.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41300fc8cf6dfeb56eca6a50a5c12242ef4fbab05d67c6962bf4359f8dfac367
|
|
| MD5 |
ffd431f7c1f48a7e27e528121bdd9131
|
|
| BLAKE2b-256 |
11e8507eb348d2fd2df9f28c1aae2e62e4334ad1952e9b091614a6aefc65ebdf
|
Provenance
The following attestation bundles were made for changedetection_io_cloak_browser-0.1.1.tar.gz:
Publisher:
pypi-release.yml on dgtlmoon/changedetection.io-cloak-browser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
changedetection_io_cloak_browser-0.1.1.tar.gz -
Subject digest:
41300fc8cf6dfeb56eca6a50a5c12242ef4fbab05d67c6962bf4359f8dfac367 - Sigstore transparency entry: 1115080524
- Sigstore integration time:
-
Permalink:
dgtlmoon/changedetection.io-cloak-browser@360c4433b5021f9644289b292cc8f6a562594873 -
Branch / Tag:
refs/tags/0.1.1 - Owner: https://github.com/dgtlmoon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@360c4433b5021f9644289b292cc8f6a562594873 -
Trigger Event:
push
-
Statement type:
File details
Details for the file changedetection_io_cloak_browser-0.1.1-py3-none-any.whl.
File metadata
- Download URL: changedetection_io_cloak_browser-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a99bc086794c1e9b44c24c8a6bf01e88cce3cae6b38f3b7e20097cc24fbb21f8
|
|
| MD5 |
d706353dce810998ae953a2a06a768fd
|
|
| BLAKE2b-256 |
2d56c3ba2eb6dd78ae64df338016b22dbd129f7a7c86b955d7f3b5906abc1548
|
Provenance
The following attestation bundles were made for changedetection_io_cloak_browser-0.1.1-py3-none-any.whl:
Publisher:
pypi-release.yml on dgtlmoon/changedetection.io-cloak-browser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
changedetection_io_cloak_browser-0.1.1-py3-none-any.whl -
Subject digest:
a99bc086794c1e9b44c24c8a6bf01e88cce3cae6b38f3b7e20097cc24fbb21f8 - Sigstore transparency entry: 1115080546
- Sigstore integration time:
-
Permalink:
dgtlmoon/changedetection.io-cloak-browser@360c4433b5021f9644289b292cc8f6a562594873 -
Branch / Tag:
refs/tags/0.1.1 - Owner: https://github.com/dgtlmoon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@360c4433b5021f9644289b292cc8f6a562594873 -
Trigger Event:
push
-
Statement type: