veilus
Launch Veilus browser profiles from Python and drive them with Playwright.
Each Veilus profile is a browser with its own fingerprint, proxy and cookies. This package talks to the Veilus app's local API, launches a profile, and connects Playwright to that profile's own browser — so your script runs with the profile's identity.
Works with
Tested with a real Veilus profile — see examples/TESTED.md for versions and date: Playwright · Puppeteer · browser-use · Stagehand · Crawl4AI · LangChain · Scrapling · Crawlee · playwright-mcp · agent-browser
pip install "veilus[playwright]"
Requires the Veilus desktop app 0.2.9 or newer, running, with the local API turned on (API & MCP page in the app sidebar, Pro plan or higher). Create a token on that page and put it in the environment:
export VEILUS_API_TOKEN=...
import asyncio
from veilus import Veilus
async def main():
veilus = Veilus()
profiles = await veilus.list_profiles()
session = await veilus.connect(profiles[0]["id"])
await session.page.goto("https://example.com")
print(await session.page.title())
await session.close() # disconnects Playwright; the profile keeps running
await veilus.stop(profiles[0]["id"])
asyncio.run(main())
connect() reuses the profile if it is already running, otherwise launches it. It returns the profile's own context and page — don't create a new context with your own user agent, viewport or locale, as those would override the profile's values for that context.
API
Veilus(token=None, port=None, app_dir=None) |
token defaults to $VEILUS_API_TOKEN; the port is read from the app's api-endpoint.json in app_dir ($VEILUS_APP_DIR or ~/.veilus) |
await list_profiles() |
all profiles; a running one carries cdpUrl |
await launch(id, diagnostic=False) |
starts the profile, returns {"pid", "cdpUrl"} |
await stop(id) |
stops the profile |
await connect(id, diagnostic=False) |
Playwright browser, context, page, cdp_url, close() |
diagnostic=True (Veilus 0.2.10 or newer) opens the profile through its proxy but without its fingerprint, in a temporary browser directory deleted on stop: the page sees this machine's real values. Use it to tell whether a site blocks the fingerprint or the IP — never on an account you care about.
Security
The token is read only from your code or VEILUS_API_TOKEN. This package never reads the app's token store. The profile's CDP address (cdpUrl) has no password: any local program can use it while the profile runs, and it listens on 127.0.0.1 only.
License
MIT or Apache-2.0, at your option.
Metadata
Release files for veilus 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| veilus-0.1.1.tar.gz | 26.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| veilus-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 33.9 kB
Release files / veilus-0.1.1.tar.gz
| Download URL | veilus-0.1.1.tar.gz |
|---|---|
| Size | 26.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
104f41fc617b2aadaeb8535009919153234da98eaf48199be38e09fbe895ce42
|
|
BLAKE2b-256 checksum How to use checksums |
0f299cc9c7b92fa045862c939cdd0fcc36b9c73e400f9ab960206d7ed6518012
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / veilus-0.1.1-py3-none-any.whl
| Download URL | veilus-0.1.1-py3-none-any.whl |
|---|---|
| Size | 7.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
62c8eed3fdebdfd4e8516291c11b303eeb63ec6d9a04d17d8f5e8c5fd132fc36
|
|
BLAKE2b-256 checksum How to use checksums |
d375502000ddd63c1bb6afebefbdcfd92aa39ef8873b2f9e77a5271aebce00d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|