feat: macOS v145 wrapper prep — GPU flags, version bump, README update

- Add explicit Mac GPU flags (Apple M3 Metal renderer) to stealth args
- Bump macOS platform versions to 145.0.7632.109
- Update README fingerprint table to reflect actual Mac GPU defaults
- Add warning about binary requiring explicit flags without wrapper
- Fix stealth_test.py wait_until for reCAPTCHA page
This commit is contained in:
CloakHQ
2026-03-03 08:57:07 +01:00
parent 53c9eb581d
commit 55418add96
3 changed files with 16 additions and 5 deletions
+11 -2
View File
@@ -361,8 +361,8 @@ Every `launch()` call sets these automatically. Defaults are **platform-aware**
| `--fingerprint` | Random (1000099999) | Random (1000099999) | Master seed for canvas, WebGL, audio, fonts, client rects | | `--fingerprint` | Random (1000099999) | Random (1000099999) | Master seed for canvas, WebGL, audio, fonts, client rects |
| `--fingerprint-platform` | `windows` | `macos` | `navigator.platform`, User-Agent OS, GPU pool selection | | `--fingerprint-platform` | `windows` | `macos` | `navigator.platform`, User-Agent OS, GPU pool selection |
| `--fingerprint-hardware-concurrency` | `8` | *(not set — uses real value)* | `navigator.hardwareConcurrency` | | `--fingerprint-hardware-concurrency` | `8` | *(not set — uses real value)* | `navigator.hardwareConcurrency` |
| `--fingerprint-gpu-vendor` | `NVIDIA Corporation` | *(not set — native Apple GPU)* | WebGL `UNMASKED_VENDOR_WEBGL` | | `--fingerprint-gpu-vendor` | `NVIDIA Corporation` | `Google Inc. (Apple)` | WebGL `UNMASKED_VENDOR_WEBGL` |
| `--fingerprint-gpu-renderer` | `NVIDIA GeForce RTX 3070` | *(not set — native Metal renderer)* | WebGL `UNMASKED_RENDERER_WEBGL` | | `--fingerprint-gpu-renderer` | `NVIDIA GeForce RTX 3070` | `ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)` | WebGL `UNMASKED_RENDERER_WEBGL` |
| `--fingerprint-device-memory` | `8` | *(not set)* | `navigator.deviceMemory` | | `--fingerprint-device-memory` | `8` | *(not set)* | `navigator.deviceMemory` |
| `--fingerprint-screen-width` | `1920` | *(not set)* | Screen width reporting | | `--fingerprint-screen-width` | `1920` | *(not set)* | Screen width reporting |
| `--fingerprint-screen-height` | `1080` | *(not set)* | Screen height reporting | | `--fingerprint-screen-height` | `1080` | *(not set)* | Screen height reporting |
@@ -370,6 +370,8 @@ Every `launch()` call sets these automatically. Defaults are **platform-aware**
> **Important:** `--fingerprint-platform` should always be set. Without it, platform-specific patches (GPU, UA, screen, taskbar) won't activate. The wrapper handles this automatically. > **Important:** `--fingerprint-platform` should always be set. Without it, platform-specific patches (GPU, UA, screen, taskbar) won't activate. The wrapper handles this automatically.
> **⚠️ Using the binary directly (without the wrapper)?** The binary does not auto-spoof without flags. You must pass `--fingerprint`, `--fingerprint-platform`, and GPU flags explicitly. Without these, real device values pass through unmodified. See the table above for the full list of flags the wrapper sets automatically.
### Additional Flags ### Additional Flags
Supported by the binary but **not set by default** — pass via `args` to customize: Supported by the binary but **not set by default** — pass via `args` to customize:
@@ -543,6 +545,13 @@ const browser = await launch({ args: ['--disable-http2'] });
Only use this flag for sites that require it — most sites work fine with HTTP/2. Only use this flag for sites that require it — most sites work fine with HTTP/2.
**Something not working? Make sure you're on the latest wrapper**
Older versions may use outdated stealth args or download an older binary:
```bash
pip install -U cloakbrowser # Python
npm install cloakbrowser@latest # JavaScript
```
**Binary download fails / timeout** **Binary download fails / timeout**
Set a custom download URL or use a local binary: Set a custom download URL or use a local binary:
```bash ```bash
+4 -2
View File
@@ -20,8 +20,8 @@ CHROMIUM_VERSION = "145.0.7632.109"
PLATFORM_CHROMIUM_VERSIONS: dict[str, str] = { PLATFORM_CHROMIUM_VERSIONS: dict[str, str] = {
"linux-x64": "145.0.7632.109", "linux-x64": "145.0.7632.109",
"darwin-arm64": "142.0.7444.175", "darwin-arm64": "145.0.7632.109",
"darwin-x64": "142.0.7444.175", "darwin-x64": "145.0.7632.109",
} }
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -47,6 +47,8 @@ def get_default_stealth_args() -> list[str]:
# Tell the fingerprint patches we're on macOS so GPU/UA match natively # Tell the fingerprint patches we're on macOS so GPU/UA match natively
return base + [ return base + [
"--fingerprint-platform=macos", "--fingerprint-platform=macos",
"--fingerprint-gpu-vendor=Google Inc. (Apple)",
"--fingerprint-gpu-renderer=ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)",
] ]
# Linux: spoof as Windows # Linux: spoof as Windows
+1 -1
View File
@@ -143,7 +143,7 @@ def test_recaptcha(page):
"""recaptcha-demo.appspot.com — Google's official reCAPTCHA v3 score.""" """recaptcha-demo.appspot.com — Google's official reCAPTCHA v3 score."""
page.goto( page.goto(
"https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php", "https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php",
wait_until="networkidle", wait_until="domcontentloaded",
timeout=30000, timeout=30000,
) )
# Page auto-submits via grecaptcha.execute() — wait for backend response # Page auto-submits via grecaptcha.execute() — wait for backend response