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.
Metadata
Release files for changedetection.io-cloak-browser 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| changedetection_io_cloak_browser-0.1.1.tar.gz | 8.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| changedetection_io_cloak_browser-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.3 kB
Release files / changedetection_io_cloak_browser-0.1.1.tar.gz
| Download URL | changedetection_io_cloak_browser-0.1.1.tar.gz |
|---|---|
| Size | 8.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
41300fc8cf6dfeb56eca6a50a5c12242ef4fbab05d67c6962bf4359f8dfac367
|
|
BLAKE2b-256 checksum How to use checksums |
11e8507eb348d2fd2df9f28c1aae2e62e4334ad1952e9b091614a6aefc65ebdf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 17, 2026.
Transparency logRelease files / changedetection_io_cloak_browser-0.1.1-py3-none-any.whl
| Download URL | changedetection_io_cloak_browser-0.1.1-py3-none-any.whl |
|---|---|
| Size | 9.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a99bc086794c1e9b44c24c8a6bf01e88cce3cae6b38f3b7e20097cc24fbb21f8
|
|
BLAKE2b-256 checksum How to use checksums |
2d56c3ba2eb6dd78ae64df338016b22dbd129f7a7c86b955d7f3b5906abc1548
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 17, 2026.
Transparency log