BrowserOxide (Python) — browser-oxide on PyPI
A stealth headless browser engine, in Rust, with Python bindings. A real HTML/CSS/DOM/JavaScript browser built from scratch — own BoringSSL TLS stack, native fingerprint, V8 JavaScript — with no Chromium, no CDP driver, no Selenium underneath. Built for scraping, archival, and AI-agent web access against modern anti-bot stacks (Cloudflare, Akamai, AWS WAF, DataDome).
pip install browser-oxide
from browser_oxide import Browser, Profile, Verdict
with Browser(profile=Profile.chrome()) as b:
page = b.navigate("https://example.com")
print(page.title, len(page.html), page.verdict)
if page.verdict == Verdict.PASS: # challenge pages return HTTP 200 —
print(page.evaluate("navigator.userAgent")) # trust the verdict, not status
print(page.query_text("h1"))
API
Profile.chrome() / .firefox() / .iphone() / .pixel() |
built-in identities (TLS + headers + navigator + GPU, coherent) |
Profile.from_file(path) |
custom profile (YAML/JSON) |
Browser(profile=None) |
spawns the engine; context-manager friendly |
b.navigate(url, max_iterations=5) -> Page |
cold navigation (GIL released) |
page.url / .title / .html / .text / .verdict / .is_challenge |
properties |
page.evaluate(js) -> str · page.query_text(sel) -> str | None |
scripting |
Verdict.PASS / THIN_SHELL / EDGE_BLOCK / SENSOR_FAIL / … |
honest render outcome |
What's real vs. not
Real: from-scratch TLS (JA3/JA4-accurate), full V8, real DOM/CSS, Canvas 2D
raster, 100+ coherent fingerprint properties. Not implemented: real WebGL
raster, HTTP/3 by default, built-in per-vendor bypass (Kasada is the open gap).
Full detail + measured pass rates: see the
repo docs
(getting-started-python.md, guides/STEALTH_FAQ.md, BENCHMARK.md).
MIT OR Apache-2.0.
Metadata
Release files for browser-oxide 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| browser_oxide-0.1.3-cp38-abi3-win_amd64.whl | CPython 3.8 | abi3 | Windows x86-64 | Details |
| browser_oxide-0.1.3-cp38-abi3-macosx_11_0_arm64.whl | CPython 3.8 | abi3 | macOS 11.0+ ARM64 | Details |
| browser_oxide-0.1.3-cp38-abi3-macosx_10_12_x86_64.whl | CPython 3.8 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 91.7 MB
Release files / browser_oxide-0.1.3-cp38-abi3-win_amd64.whl
| Download URL | browser_oxide-0.1.3-cp38-abi3-win_amd64.whl |
|---|---|
| Size | 30.1 MB |
| Tags | CPython 3.8 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e849af65c638b2ec24cb3ad67cf9e70ad0f5d35a3f20d7890a0d7f8046878cb6
|
|
BLAKE2b-256 checksum How to use checksums |
25bb427da9616beacb8857263998c0d49a93b11bc15fe7adc44c6315babb3098
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Release files / browser_oxide-0.1.3-cp38-abi3-macosx_11_0_arm64.whl
| Download URL | browser_oxide-0.1.3-cp38-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 30.3 MB |
| Tags | CPython 3.8 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
06de285c6dde122b243d958fe28e2bd2e1cadf3ffc79f09b2187a7381d7e49d1
|
|
BLAKE2b-256 checksum How to use checksums |
e3636d488578c55c0cbf2d8cab36ae348d6a6ad3b7cee13a3b2e012df71d7497
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Release files / browser_oxide-0.1.3-cp38-abi3-macosx_10_12_x86_64.whl
| Download URL | browser_oxide-0.1.3-cp38-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 31.4 MB |
| Tags | CPython 3.8 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
ee70ead3fbb916bc9d1cd5e347cdc1e94f4d2d234d739044ddbece44ecd2202c
|
|
BLAKE2b-256 checksum How to use checksums |
38fe8a3793d5a4abc1561b596a751293dbfdca07b9de9d468037846d7b0d97c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|