|
|
@@ -40,7 +40,7 @@ Drop-in Playwright/Puppeteer replacement for Python and JavaScript.<br>
|
|
|
|
Same API, same code — just swap the import. <strong>3 lines of code, 30 seconds to unblock.</strong>
|
|
|
|
Same API, same code — just swap the import. <strong>3 lines of code, 30 seconds to unblock.</strong>
|
|
|
|
</p>
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
- **48 source-level C++ patches** — canvas, WebGL, audio, fonts, GPU, screen, WebRTC, network timing, automation signals, CDP input behavior
|
|
|
|
- **49 source-level C++ patches** — canvas, WebGL, audio, fonts, GPU, screen, WebRTC, network timing, automation signals, CDP input behavior
|
|
|
|
- **`humanize=True`** — human-like mouse curves, keyboard timing, and scroll patterns. One flag, behavioral detection passes
|
|
|
|
- **`humanize=True`** — human-like mouse curves, keyboard timing, and scroll patterns. One flag, behavioral detection passes
|
|
|
|
- **0.9 reCAPTCHA v3 score** — human-level, server-verified
|
|
|
|
- **0.9 reCAPTCHA v3 score** — human-level, server-verified
|
|
|
|
- **Passes Cloudflare Turnstile**, FingerprintJS, BrowserScan — tested against 30+ detection sites
|
|
|
|
- **Passes Cloudflare Turnstile**, FingerprintJS, BrowserScan — tested against 30+ detection sites
|
|
|
@@ -128,9 +128,10 @@ Open [http://localhost:8080](http://localhost:8080). Create a profile. Click **L
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Latest: v0.3.20 (Chromium 145.0.7632.159.9)
|
|
|
|
## Latest: v0.3.22 (Chromium 146.0.7680.177.1)
|
|
|
|
|
|
|
|
|
|
|
|
- **48 fingerprint patches** (Linux x64) — 6 new patches covering WebRTC IP spoofing, proxy signal removal, and network timing normalization
|
|
|
|
- **Chromium 146 upgrade** — rebased all patches from 145.0.7632.x to 146.0.7680.177
|
|
|
|
|
|
|
|
- **49 fingerprint patches** (Linux x64) — 1 new patch, all existing patches carried forward
|
|
|
|
- **WebRTC IP spoofing** — `--fingerprint-webrtc-ip=auto` resolves your proxy's exit IP and spoofs WebRTC ICE candidates. Auto-injected when using `geoip=True` (no extra network call)
|
|
|
|
- **WebRTC IP spoofing** — `--fingerprint-webrtc-ip=auto` resolves your proxy's exit IP and spoofs WebRTC ICE candidates. Auto-injected when using `geoip=True` (no extra network call)
|
|
|
|
- **Proxy signal removal** — DNS/connect/SSL timing zeroed, proxy cache headers stripped, Proxy-Connection header leak removed
|
|
|
|
- **Proxy signal removal** — DNS/connect/SSL timing zeroed, proxy cache headers stripped, Proxy-Connection header leak removed
|
|
|
|
- **`cloakserve` CDP multiplexer** — rewritten as a multi-connection CDP proxy with per-connection fingerprint seeds
|
|
|
|
- **`cloakserve` CDP multiplexer** — rewritten as a multi-connection CDP proxy with per-connection fingerprint seeds
|
|
|
@@ -154,7 +155,7 @@ CloakBrowser doesn't solve CAPTCHAs — it prevents them from appearing. No CAPT
|
|
|
|
|
|
|
|
|
|
|
|
## Test Results
|
|
|
|
## Test Results
|
|
|
|
|
|
|
|
|
|
|
|
All tests verified against live detection services. Last tested: Mar 2026 (Chromium 145).
|
|
|
|
All tests verified against live detection services. Last tested: Apr 2026 (Chromium 146).
|
|
|
|
|
|
|
|
|
|
|
|
| Detection Service | Stock Playwright | CloakBrowser | Notes |
|
|
|
|
| Detection Service | Stock Playwright | CloakBrowser | Notes |
|
|
|
|
|---|---|---|---|
|
|
|
|
|---|---|---|---|
|
|
|
@@ -169,7 +170,7 @@ All tests verified against live detection services. Last tested: Mar 2026 (Chrom
|
|
|
|
| `navigator.webdriver` | `true` | **`false`** | Source-level patch |
|
|
|
|
| `navigator.webdriver` | `true` | **`false`** | Source-level patch |
|
|
|
|
| `navigator.plugins.length` | 0 | **5** | Real plugin list |
|
|
|
|
| `navigator.plugins.length` | 0 | **5** | Real plugin list |
|
|
|
|
| `window.chrome` | `undefined` | **`object`** | Present like real Chrome |
|
|
|
|
| `window.chrome` | `undefined` | **`object`** | Present like real Chrome |
|
|
|
|
| UA string | `HeadlessChrome` | **`Chrome/145.0.0.0`** | No headless leak |
|
|
|
|
| UA string | `HeadlessChrome` | **`Chrome/146.0.0.0`** | No headless leak |
|
|
|
|
| CDP detection | Detected | **Not detected** | `isAutomatedWithCDP: false` |
|
|
|
|
| CDP detection | Detected | **Not detected** | `isAutomatedWithCDP: false` |
|
|
|
|
| TLS fingerprint | Mismatch | **Identical to Chrome** | ja3n/ja4/akamai match |
|
|
|
|
| TLS fingerprint | Mismatch | **Identical to Chrome** | ja3n/ja4/akamai match |
|
|
|
|
| | | **Tested against 30+ detection sites** | |
|
|
|
|
| | | **Tested against 30+ detection sites** | |
|
|
|
@@ -218,11 +219,11 @@ All tests verified against live detection services. Last tested: Mar 2026 (Chrom
|
|
|
|
CloakBrowser is a thin wrapper (Python + JavaScript) around a custom-built Chromium binary:
|
|
|
|
CloakBrowser is a thin wrapper (Python + JavaScript) around a custom-built Chromium binary:
|
|
|
|
|
|
|
|
|
|
|
|
1. **You install** → `pip install cloakbrowser` or `npm install cloakbrowser`
|
|
|
|
1. **You install** → `pip install cloakbrowser` or `npm install cloakbrowser`
|
|
|
|
2. **First launch** → binary auto-downloads for your platform (Chromium 145)
|
|
|
|
2. **First launch** → binary auto-downloads for your platform (Chromium 146)
|
|
|
|
3. **Every launch** → Playwright or Puppeteer starts with our binary + stealth args
|
|
|
|
3. **Every launch** → Playwright or Puppeteer starts with our binary + stealth args
|
|
|
|
4. **You write code** → standard Playwright/Puppeteer API, nothing new to learn
|
|
|
|
4. **You write code** → standard Playwright/Puppeteer API, nothing new to learn
|
|
|
|
|
|
|
|
|
|
|
|
The binary includes 48 source-level patches covering canvas, WebGL, audio, fonts, GPU, screen properties, WebRTC, network timing, hardware reporting, automation signal removal, and CDP input behavior mimicking.
|
|
|
|
The binary includes 49 source-level patches covering canvas, WebGL, audio, fonts, GPU, screen properties, WebRTC, network timing, hardware reporting, automation signal removal, and CDP input behavior mimicking.
|
|
|
|
|
|
|
|
|
|
|
|
These are compiled into the Chromium binary — not injected via JavaScript, not set via flags.
|
|
|
|
These are compiled into the Chromium binary — not injected via JavaScript, not set via flags.
|
|
|
|
|
|
|
|
|
|
|
@@ -369,7 +370,7 @@ from cloakbrowser import binary_info, clear_cache, ensure_binary
|
|
|
|
|
|
|
|
|
|
|
|
# Check binary installation status
|
|
|
|
# Check binary installation status
|
|
|
|
print(binary_info())
|
|
|
|
print(binary_info())
|
|
|
|
# {'version': '145.0.7632.159.2', 'platform': 'linux-x64', 'installed': True, ...}
|
|
|
|
# {'version': '146.0.7680.177.1', 'platform': 'linux-x64', 'installed': True, ...}
|
|
|
|
|
|
|
|
|
|
|
|
# Force re-download
|
|
|
|
# Force re-download
|
|
|
|
clear_cache()
|
|
|
|
clear_cache()
|
|
|
@@ -652,7 +653,7 @@ browser = await launch_async(args=["--remote-debugging-port=9242"])
|
|
|
|
|
|
|
|
|
|
|
|
| Platform | Chromium | Patches | Status |
|
|
|
|
| Platform | Chromium | Patches | Status |
|
|
|
|
|---|---|---|---|
|
|
|
|
|---|---|---|---|
|
|
|
|
| Linux x86_64 | 145 | 48 | ✅ Latest |
|
|
|
|
| Linux x86_64 | 146 | 49 | ✅ Latest |
|
|
|
|
| Linux arm64 (RPi, Graviton) | 145 | 48 | ✅ |
|
|
|
|
| Linux arm64 (RPi, Graviton) | 145 | 48 | ✅ |
|
|
|
|
| macOS arm64 (Apple Silicon) | 145 | 26 | ✅ |
|
|
|
|
| macOS arm64 (Apple Silicon) | 145 | 26 | ✅ |
|
|
|
|
| macOS x86_64 (Intel) | 145 | 26 | ✅ |
|
|
|
|
| macOS x86_64 (Intel) | 145 | 26 | ✅ |
|
|
|
@@ -917,9 +918,9 @@ export CLOAKBROWSER_BINARY_PATH=/path/to/your/chrome
|
|
|
|
|
|
|
|
|
|
|
|
Install a specific wrapper version to downgrade both the wrapper and the binary it downloads:
|
|
|
|
Install a specific wrapper version to downgrade both the wrapper and the binary it downloads:
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
pip install cloakbrowser==0.3.11 # Python
|
|
|
|
pip install cloakbrowser==0.3.21 # Python
|
|
|
|
npm install cloakbrowser@0.3.11 # JavaScript
|
|
|
|
npm install cloakbrowser@0.3.21 # JavaScript
|
|
|
|
docker pull cloakhq/cloakbrowser:0.3.11 # Docker
|
|
|
|
docker pull cloakhq/cloakbrowser:0.3.21 # Docker
|
|
|
|
```
|
|
|
|
```
|
|
|
|
Each wrapper version pins its own binary version, so downgrading the wrapper automatically gets you the matching binary on next launch.
|
|
|
|
Each wrapper version pins its own binary version, so downgrading the wrapper automatically gets you the matching binary on next launch.
|
|
|
|
|
|
|
|
|
|
|
@@ -1015,7 +1016,7 @@ A: Yes. Pass `proxy="http://user:pass@host:port"` to `launch()`.
|
|
|
|
|
|
|
|
|
|
|
|
| Feature | Status |
|
|
|
|
| Feature | Status |
|
|
|
|
|---------|--------|
|
|
|
|
|---------|--------|
|
|
|
|
| Linux x64 — Chromium 145 (48 patches) | ✅ Released |
|
|
|
|
| Linux x64 — Chromium 146 (49 patches) | ✅ Released |
|
|
|
|
| macOS arm64/x64 — Chromium 145 (26 patches) | ✅ Released |
|
|
|
|
| macOS arm64/x64 — Chromium 145 (26 patches) | ✅ Released |
|
|
|
|
| Windows x64 — Chromium 145 (33 patches) | ✅ Released |
|
|
|
|
| Windows x64 — Chromium 145 (33 patches) | ✅ Released |
|
|
|
|
| JavaScript/Puppeteer + Playwright support | ✅ Released |
|
|
|
|
| JavaScript/Puppeteer + Playwright support | ✅ Released |
|
|
|
@@ -1039,7 +1040,7 @@ All releases are signed for supply chain verification.
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
# Verify GPG signature (binary release tag)
|
|
|
|
# Verify GPG signature (binary release tag)
|
|
|
|
gpg --keyserver keyserver.ubuntu.com --recv-keys C60C0DDC9D0DE2DD
|
|
|
|
gpg --keyserver keyserver.ubuntu.com --recv-keys C60C0DDC9D0DE2DD
|
|
|
|
git verify-tag chromium-v145.0.7632.159.9
|
|
|
|
git verify-tag chromium-v146.0.7680.177.1
|
|
|
|
|
|
|
|
|
|
|
|
# Verify GitHub binary attestation (Sigstore)
|
|
|
|
# Verify GitHub binary attestation (Sigstore)
|
|
|
|
gh attestation verify cloakbrowser-linux-x64.tar.gz --repo CloakHQ/cloakbrowser
|
|
|
|
gh attestation verify cloakbrowser-linux-x64.tar.gz --repo CloakHQ/cloakbrowser
|
|
|
|