mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
Playwright disables normal background throttling, so a hidden 5chan page keeps doing P2P and rendering work after a check finishes. Agents verifying in parallel across worktrees stacked whole browser engines on one machine. Add scripts/pw-session.sh, a wrapper that permits one active Playwright browser at a time and records who holds it: - The lock is machine-wide, not per-repository, because the contended resource is RAM and CPU. Every worktree and checkout shares one slot. - Acquisition is an atomic mkdir. Stale locks clear themselves: `open` reclaims any slot whose recorded browser is no longer `status: open` in `playwright-cli list --all`, so an interrupted workflow cannot strand the budget. When that list cannot be read the lock is left alone, so a broken CLI never silently disables the budget. - `open` exits 75 when the slot is busy; `--wait[=SECONDS]` blocks instead. - `close` always stops the browser, even when the lock was already lost, and never releases a slot held by a different session. - `status` reports the holder and whether its browser is still alive. Agent policy now runs browser engines and profiler batches sequentially, uses Chrome/Blink during iteration and the full engine matrix only for final verification, and never uses `close-all` or `kill-all` while other agents may own sessions. Covered by scripts/pw-session.test.js.
170 lines
4.2 KiB
Markdown
170 lines
4.2 KiB
Markdown
# Browser Session Management
|
|
|
|
Manage isolated browser sessions with state persistence. In 5chan, keep only one session active machine-wide and use the shared wrapper for the open/close lifecycle.
|
|
|
|
```bash
|
|
./scripts/pw-session.sh open verify-chrome https://5chan.localhost --browser=chrome
|
|
playwright-cli -s=verify-chrome snapshot
|
|
./scripts/pw-session.sh close verify-chrome
|
|
```
|
|
|
|
## Named Browser Sessions
|
|
|
|
Use `-b` flag to isolate browser contexts:
|
|
|
|
```bash
|
|
# Browser 1: Authentication flow
|
|
playwright-cli -s=auth open https://app.example.com/login
|
|
|
|
# Browser 2: Public browsing (separate cookies, storage)
|
|
playwright-cli -s=public open https://example.com
|
|
|
|
# Commands are isolated by browser session
|
|
playwright-cli -s=auth fill e1 "user@example.com"
|
|
playwright-cli -s=public snapshot
|
|
```
|
|
|
|
## Browser Session Isolation Properties
|
|
|
|
Each browser session has independent:
|
|
- Cookies
|
|
- LocalStorage / SessionStorage
|
|
- IndexedDB
|
|
- Cache
|
|
- Browsing history
|
|
- Open tabs
|
|
|
|
## Browser Session Commands
|
|
|
|
```bash
|
|
# List all browser sessions
|
|
playwright-cli list
|
|
|
|
# Stop a browser session (close the browser)
|
|
playwright-cli close # stop the default browser
|
|
playwright-cli -s=mysession close # stop a named browser
|
|
|
|
# Stop all browser sessions
|
|
playwright-cli close-all
|
|
|
|
# Forcefully kill all daemon processes (for stale/zombie processes)
|
|
playwright-cli kill-all
|
|
|
|
# Delete browser session user data (profile directory)
|
|
playwright-cli delete-data # delete default browser data
|
|
playwright-cli -s=mysession delete-data # delete named browser data
|
|
```
|
|
|
|
## Environment Variable
|
|
|
|
Set a default browser session name via environment variable:
|
|
|
|
```bash
|
|
export PLAYWRIGHT_CLI_SESSION="mysession"
|
|
playwright-cli open example.com # Uses "mysession" automatically
|
|
```
|
|
|
|
## Common Patterns
|
|
|
|
### Sequential Cross-Browser Verification
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Keep one browser active at a time, machine-wide.
|
|
|
|
for engine in chrome firefox webkit; do
|
|
session="verify-$engine"
|
|
./scripts/pw-session.sh open "$session" https://5chan.localhost --browser="$engine"
|
|
playwright-cli -s="$session" snapshot
|
|
./scripts/pw-session.sh close "$session"
|
|
done
|
|
```
|
|
|
|
### A/B Testing Sessions
|
|
|
|
```bash
|
|
# Test different user experiences
|
|
playwright-cli -s=variant-a open "https://app.com?variant=a"
|
|
playwright-cli -s=variant-b open "https://app.com?variant=b"
|
|
|
|
# Compare
|
|
playwright-cli -s=variant-a screenshot
|
|
playwright-cli -s=variant-b screenshot
|
|
```
|
|
|
|
### Persistent Profile
|
|
|
|
By default, browser profile is kept in memory only. Use `--persistent` flag on `open` to persist the browser profile to disk:
|
|
|
|
```bash
|
|
# Use persistent profile (auto-generated location)
|
|
playwright-cli open https://example.com --persistent
|
|
|
|
# Use persistent profile with custom directory
|
|
playwright-cli open https://example.com --profile=/path/to/profile
|
|
```
|
|
|
|
## Default Browser Session
|
|
|
|
When `-s` is omitted, commands use the default browser session:
|
|
|
|
```bash
|
|
# These use the same default browser session
|
|
playwright-cli open https://example.com
|
|
playwright-cli snapshot
|
|
playwright-cli close # Stops default browser
|
|
```
|
|
|
|
## Browser Session Configuration
|
|
|
|
Configure a browser session with specific settings when opening:
|
|
|
|
```bash
|
|
# Open with config file
|
|
playwright-cli open https://example.com --config=.playwright/my-cli.json
|
|
|
|
# Open with specific browser
|
|
playwright-cli open https://example.com --browser=firefox
|
|
|
|
# Open in headed mode
|
|
playwright-cli open https://example.com --headed
|
|
|
|
# Open with persistent profile
|
|
playwright-cli open https://example.com --persistent
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### 1. Name Browser Sessions Semantically
|
|
|
|
```bash
|
|
# GOOD: Clear purpose
|
|
playwright-cli -s=github-auth open https://github.com
|
|
playwright-cli -s=docs-scrape open https://docs.example.com
|
|
|
|
# AVOID: Generic names
|
|
playwright-cli -s=s1 open https://github.com
|
|
```
|
|
|
|
### 2. Always Clean Up
|
|
|
|
```bash
|
|
# Stop browsers when done
|
|
playwright-cli -s=auth close
|
|
playwright-cli -s=scrape close
|
|
|
|
# Do not use these global commands while concurrent agents may own sessions.
|
|
# Stop all at once
|
|
playwright-cli close-all
|
|
|
|
# If browsers become unresponsive or zombie processes remain
|
|
playwright-cli kill-all
|
|
```
|
|
|
|
### 3. Delete Stale Browser Data
|
|
|
|
```bash
|
|
# Remove old browser data to free disk space
|
|
playwright-cli -s=oldsession delete-data
|
|
```
|