Chrome DevTools with accessibility-tree semantics
Project description
Quay — Chrome DevTools with Accessibility Semantics
Quay combines Chrome DevTools Protocol with accessibility-tree semantics for browser automation using your authenticated Chrome sessions.
Why Quay?
| Feature | Quay | Playwright | agent-browser | Raw CDP |
|---|---|---|---|---|
| Accessibility tree | ✅ | ❌ | ✅ | ❌ |
| Uses your logged-in Chrome | ✅ | ❌ | ❌ | ❌ |
| Connection pooling | ✅ | ❌ | ❌ | ❌ |
| Auto-reconnect | ✅ | ❌ | ❌ | ❌ |
| Python-native | ✅ | ✅ | ❌ | ❌ |
| Session recording | ✅ | ❌ | ❌ | ❌ |
| Weight | ~20KB | ~MB | ~MB | ~5MB |
Installation
pip install quay
Or from source:
git clone https://github.com/sidonsoft/quay
cd quay
pip install -e .
Prerequisites
Chrome must be running with remote debugging enabled:
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# Linux
google-chrome --remote-debugging-port=9222
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
Or use the included launcher:
./scripts/chrome-debug.sh
Quick Start
Python API
from quay import Browser
browser = Browser()
browser.goto("https://gmail.com") # Uses your logged-in session
tree = browser.accessibility_tree()
print(tree.to_tree_str())
browser.click_by_text("Sign in")
browser.fill_form({"Email": "user@example.com"})
CLI
# List tabs
quay list
# Open new tab
quay new https://example.com
# Get accessibility tree
quay snapshot
# Take screenshot
quay screenshot
# Click by text
quay click "Submit"
Features
| Feature | Description |
|---|---|
| Accessibility Tree | Navigate pages using AX nodes like agent-browser |
| Session Reuse | Uses your existing Chrome session (no separate browser) |
| Connection Pooling | WebSocket reuse across operations for speed |
| Auto-Reconnect | Automatically reconnects on connection drop |
| Session Recording | Record and replay browser actions |
| Form Filling | Fill forms by label text |
| Click by Text | Click elements matching visible text |
| JavaScript Eval | Run arbitrary JavaScript |
Automatic Reconnection
Quay automatically detects dropped connections and reconnects:
browser = Browser(reconnect=True, reconnect_max_retries=3)
# If connection drops during operation,
# Quay will attempt to reconnect automatically
tree = browser.accessibility_tree() # May auto-reconnect if needed
Monitor reconnection with a callback:
def on_reconnect(msg):
print(f"Reconnecting: {msg}")
browser = Browser(reconnect_callback=on_reconnect)
License
Apache-2.0 - See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quay-0.1.0.tar.gz.
File metadata
- Download URL: quay-0.1.0.tar.gz
- Upload date:
- Size: 44.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
326cefc68a081a1922a4d347513d142e914e042c79254af193ec43daf424c47d
|
|
| MD5 |
b255872c8989b12d895f8175eb604a6e
|
|
| BLAKE2b-256 |
33db1885742e823fd0018cadbf672099fb36ecd284d96633cbc78f80303e2848
|
File details
Details for the file quay-0.1.0-py3-none-any.whl.
File metadata
- Download URL: quay-0.1.0-py3-none-any.whl
- Upload date:
- Size: 46.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c638642555d3b90fcaa5eb4835c59df9074b14f8af64e780d435f1b0f31a2371
|
|
| MD5 |
5c9540674b5258150a05b1106ffdd000
|
|
| BLAKE2b-256 |
ac3de09d587996b78fa94fb3d6fb5287b0b40c99131e0b672d40bd2035af0ecd
|