Skip to main content

Web access for LLM agents. One static binary. No Chrome.

Project description

unbrowser

Web access for LLM agents. One static binary. No Chrome.

Single-file native headless browser optimized for LLM agents. Runs JavaScript via QuickJS, returns a low-token page summary on every navigate, and gives you stable element refs for click/type/submit. Tens of MB RAM per session, no Chrome dependency.

pip install pyunbrowser   # PyPI name; the import is `from unbrowser import ...`

The wheel ships the native binary for your platform — there's nothing else to install.

Quick start

from unbrowser import Client

with Client() as ub:
    r = ub.navigate("https://news.ycombinator.com")
    for s in ub.query(".titleline > a")[:3]:
        print(s["text"], s["attrs"]["href"])

Why

curl This Playwright / headless Chrome
Static / SSR pages ✅ but token-heavy ✅ low-token BlockMap overkill
SPA-shell sites (with exec_scripts) ⚠️ partial
Bot-walled (cookie handoff)
Run in Lambda / Workers / edge ❌ Chrome too big
Per-page cost at 100K/day ~free ~free $$$
LLM-shaped output DIY parse ✅ inline BlockMap DIY parse

What it does

  • navigate(url) — fetch, parse, return {status, url, bytes, headers, blockmap, challenge}. With exec_scripts=True, runs page JS in QuickJS (bounded by a 30s watchdog so it can't wedge).
  • query(selector) — CSS query → [{ref, tag, attrs, text}]. Refs are stable handles for click/type/submit.
  • extract() — auto-strategy structured data: tries JSON-LD → __NEXT_DATA__ → Nuxt → OpenGraph → microdata → text fallback, returns highest-confidence hit.
  • click(ref) / type(ref, text) / submit(ref) — interaction. POST and GET forms supported. Checkboxes/radios tracked.
  • cookies_set(...) — paste cookies from a real Chrome session to bypass bot detection (Cloudflare, PerimeterX, Datadome). Solve once, replay forever.

Full RPC reference, BlockMap shape, challenge detection, profile system, and architecture: github.com/protostatis/unbrowser.

Honest limits

  • Heavy framework SPAs (Ember/React) often don't auto-mount inside QuickJS even with exec_scripts=True — the watchdog ensures it returns, check density.likely_js_filled to decide whether to escalate.
  • No screenshots (out of scope by design).
  • Hardest-tier anti-bot (FingerprintJS Pro, Kasada, advanced Akamai BMP) needs the cookie handoff path. The binary detects and labels the challenge for you.

License

Apache-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyunbrowser-0.0.9.tar.gz (13.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyunbrowser-0.0.9-py3-none-manylinux_2_35_aarch64.whl (4.1 MB view details)

Uploaded Python 3manylinux: glibc 2.35+ ARM64

pyunbrowser-0.0.9-py3-none-manylinux_2_31_x86_64.whl (4.3 MB view details)

Uploaded Python 3manylinux: glibc 2.31+ x86-64

pyunbrowser-0.0.9-py3-none-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

pyunbrowser-0.0.9-py3-none-macosx_10_12_x86_64.whl (4.1 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file pyunbrowser-0.0.9.tar.gz.

File metadata

  • Download URL: pyunbrowser-0.0.9.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyunbrowser-0.0.9.tar.gz
Algorithm Hash digest
SHA256 26cc08bcb42c24ea8ced9691b0c44082aece7715fc3e5a90927a7ff020314a79
MD5 303d7f7b1b54ea1d95a6d3ea660d70e7
BLAKE2b-256 d33d460e23f5b8572d6eebffc305e1ffb23b0164ee3d1d93654481fda4c7e37a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.9.tar.gz:

Publisher: release.yml on protostatis/unbrowser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyunbrowser-0.0.9-py3-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for pyunbrowser-0.0.9-py3-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 4c26e04ddf9c21aa097ebf33cad389f43f7ad30f9bab58809afd62f5491da73a
MD5 9bf0086e4f16e84b6b32f50de618e390
BLAKE2b-256 3ef2aa49c0e5bdb4d91ca8eb6e1b63744b4f78e3cb5c06dc10fcc12b6ac0e7f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.9-py3-none-manylinux_2_35_aarch64.whl:

Publisher: release.yml on protostatis/unbrowser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyunbrowser-0.0.9-py3-none-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for pyunbrowser-0.0.9-py3-none-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 0b196bfa834fbedaea002f143ef93ab776561b1582f593b799285eaf95825bda
MD5 2976903881c2fd67bc375e66e44614dc
BLAKE2b-256 e0335d00fa41f60fb4313a732da4822620fca08d1b32a22381bef35406e8e3b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.9-py3-none-manylinux_2_31_x86_64.whl:

Publisher: release.yml on protostatis/unbrowser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyunbrowser-0.0.9-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyunbrowser-0.0.9-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 94876a60b8fb01834c8ebdcf08e0d66679544e75495e85458c621bb99808a225
MD5 547c9fa37b0d72e43f2f85e9425b2344
BLAKE2b-256 b8f03d2e6c39e9c05406760f6c3c2e4e093f42962057af9d5a4b793c0c6ed3a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.9-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on protostatis/unbrowser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyunbrowser-0.0.9-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyunbrowser-0.0.9-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7f9413965ca934df188537c00ed293119d7af4b8faa60df08462cf24b0ee1e97
MD5 12171f90e2d146df63b98b357b9fd8b1
BLAKE2b-256 3d761ab4e1590e313ad53ed5c373ffadcf1438008e5af90a4b4feb63fa0d3b77

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.9-py3-none-macosx_10_12_x86_64.whl:

Publisher: release.yml on protostatis/unbrowser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page