explaingit

clark-labs-inc/clark-browser

104PythonAudience · developerComplexity · 5/5ActiveLicenseSetup · moderate

TLDR

Custom Chromium build patched at the C++ level to look like a normal browser to bot detectors, shipped as prebuilt binaries plus a Python Playwright wrapper.

Mindmap

mindmap
  root((clark-browser))
    Inputs
      Fingerprint seed
      Platform flags
      Playwright script
    Outputs
      Patched Chromium binary
      Spoofed fingerprint
      Automation session
    Use Cases
      QA test anti bot pages
      Scrape public data
      Research detection systems
    Tech Stack
      Chromium
      C++
      Python
      Playwright
      ungoogled-chromium

Things people build with this

USE CASE 1

Run automated QA tests against pages that block Playwright or Selenium

USE CASE 2

Research how browser fingerprinting and bot detection signals interact

USE CASE 3

Drive a deterministic Chromium identity for reproducible scraping tests

USE CASE 4

Compare detection results across FingerprintJS, BrowserScan, and Cloudflare smoke pages

Tech stack

ChromiumC++PythonPlaywright

Getting it running

Difficulty · moderate Time to first run · 30min

Prebuilt binaries install in minutes via pip and Releases, but building from source needs 80 GB disk, 32 GB RAM, and a 4 to 12 hour Chromium build.

MIT license, free to use, modify, and redistribute including for commercial work, with attribution.

In plain English

clark-browser is a custom build of Chromium that has been patched to be harder to detect as an automated browser. The author starts from ungoogled-chromium 148.0.7778.96 and applies a series of patches at the C++ source level so that the JavaScript-visible signals a bot detection script looks at, things like navigator.webdriver, the plugin list, the User-Agent string, and WebGL vendor strings, all read the way a normal Chrome install would read them. The argument made in the README is that JavaScript-only stealth shims, like puppeteer-extra-plugin-stealth or undetected-chromedriver, only paper over the surface. Detection sites such as FingerprintJS, BrowserScan, and Cloudflare Turnstile can spot those shims because the patches themselves leave traces. By moving the patches down into blink, v8, and the network stack, clark-browser tries to remove the bot signal at its source. The project ships as prebuilt binaries for Linux x86_64 and macOS arm64 on the GitHub Releases page, plus a Python package on PyPI that wraps Playwright. A small set of command-line flags drives the stealth configuration: --fingerprint takes an integer seed for a deterministic identity, and a family of --fingerprint-platform, --fingerprint-gpu-vendor, --fingerprint-timezone, --fingerprint-locale, and similar switches let the operator pin the spoofed identity to a specific operating system, GPU, timezone, or language. A table lists which specific detection vectors have been verified working in the project's own smoke tests, with examples like navigator.webdriver always returning false, the plugin list always containing five PDF viewer entries, and the audio fingerprint producing different results for different seeds. A second table reports results from publicly available detector pages tested on 2026-05-20 against the released Linux binary: Cloudflare smoke, SannySoft, BrowserLeaks WebGL, and BrowserLeaks Client Hints all marked PASS, while CreepJS still shows a Headless panel. Building from source is documented but heavy: roughly 17 GB of Chromium source to fetch, then a 4 to 12 hour build needing 80 GB of disk and at least 32 GB of RAM. The code is MIT licensed and the patches are written from public sources only.

Copy-paste prompts

Prompt 1
Walk me through installing the clark-browser Python package and running a hello world Playwright script with a fixed --fingerprint seed
Prompt 2
Show me how to pin clark-browser to a macOS arm64 identity with US English locale and NVIDIA GPU vendor
Prompt 3
Explain which clark-browser flags change navigator.webdriver, the plugin list, and the WebGL vendor string
Prompt 4
Help me write a smoke test that runs clark-browser against BrowserLeaks and asserts the WebGL panel passes
Prompt 5
Sketch a CI job that builds clark-browser from the ungoogled-chromium 148 source on a 32 GB RAM Linux runner
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.