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.6.tar.gz (12.7 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.6-py3-none-manylinux_2_35_x86_64.whl (4.3 MB view details)

Uploaded Python 3manylinux: glibc 2.35+ x86-64

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

Uploaded Python 3macOS 11.0+ ARM64

pyunbrowser-0.0.6-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.6.tar.gz.

File metadata

  • Download URL: pyunbrowser-0.0.6.tar.gz
  • Upload date:
  • Size: 12.7 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.6.tar.gz
Algorithm Hash digest
SHA256 37340f51cf980993026a4f455a92538bfed38944f7e34c460f48a85f402c2c67
MD5 3296848043e654410acd663f01e4ec09
BLAKE2b-256 3a470ae37636223ff5ea13b29feca408637c6dbdd93fad509d6ee09a9fce8f82

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.6.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.6-py3-none-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for pyunbrowser-0.0.6-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 c04644099bd5f267a682c99cdc056e9f4cc098edd53e95116b67f1b6badbc5ed
MD5 4905fd4cbf06c714e97106a82210d407
BLAKE2b-256 ecb76c68ed155c04277f9a290b4760aad460be04833cf2c1098549609c39f2ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.6-py3-none-manylinux_2_35_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.6-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyunbrowser-0.0.6-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ccfcca1f91dcb0b14cf53a5f4a66a6567f071ed1d5ca8e3f5cb7d991494ef954
MD5 4913e709aa63e6780f4b378858de0e2c
BLAKE2b-256 f84b682c5a12f081bd2e23b99d98f8099314f60a640f1be731a0d6283755edbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.6-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.6-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyunbrowser-0.0.6-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b55f5a3d4931642c97260c2fb313df8266599cb392de769379fad368b998bb8e
MD5 c8c933f07b62673cad7ccd131ab12067
BLAKE2b-256 635e62706b34ddb345922cf521248ab3a48d55b050cfe0b75b9ba373d57ec9a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyunbrowser-0.0.6-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