nodriverlisted
Install: claude install-skill OpenCoven/coven
# nodriver
Async Python library for undetected browser automation via CDP. Successor to `undetected-chromedriver`. No Selenium, no chromedriver binary.
Docs: https://ultrafunkamsterdam.github.io/nodriver
## Prerequisites
- Chrome/Chromium/Edge/Brave installed (default location)
- Headless environments: use Xvfb or `headless=True`
## Quick start
```python
import nodriver as uc
async def main():
browser = await uc.start()
tab = await browser.get('https://example.com')
if __name__ == '__main__':
uc.loop().run_until_complete(main())
```
## Critical quirks (non-obvious)
- **Never use `asyncio.run()`** — use `uc.loop().run_until_complete(main())`.
- **`await tab` between rapid interactions** — syncs DOM state, prevents stale refs. Insert whenever elements aren't found or interactions fail.
- **Fresh profile each run by default** — set `user_data_dir="/path"` to persist.
- **`find(text, best_match=True)`** is expensive but accurate (matches by text length). Use `select(css)` when selector is known.
- **All lookup methods retry until `timeout`** (default 10s) — double as wait conditions. `await tab.select('body')` = wait for page load.
- **`expert=True` increases detectability** — opens shadow roots and disables web security, but WAFs detect it more easily.
- **`verify_cf()` requires `opencv-python`** — English only, doesn't work in expert mode.
## Start options
```python
browser = await uc.start(
headless=False,
user_data_dir="/path/to/profile",
b