18 lines
1.0 KiB
Markdown
18 lines
1.0 KiB
Markdown
# Screenshots
|
||
|
||
`capture_screenshot()` writes a PNG of the current viewport. The file is in **device pixels** — on a 2× display a 2296×1143 CSS viewport produces a 4592×2286 PNG.
|
||
|
||
That matters for two reasons:
|
||
|
||
1. **Click coordinates are CSS pixels.** Don't read a target off the image and pass it to `click_at_xy()` directly without dividing by `devicePixelRatio`. The simplest workflow is to take the screenshot, look at it in a viewer that shows CSS coordinates, or measure relative positions and use `js("window.devicePixelRatio")` to convert.
|
||
|
||
2. **Some LLMs reject images > 2000 px per side.** Long sessions on 2× displays will eventually hit this. Pass `max_dim=1800` to downscale the file before it gets into the conversation:
|
||
|
||
```python
|
||
capture_screenshot("/tmp/shot.png", max_dim=1800)
|
||
```
|
||
|
||
The downscale only happens when the image actually exceeds `max_dim`, so it's safe to leave on for every shot.
|
||
|
||
Use full-page screenshots (`full=True`) only when you need to see content below the fold — they are much larger and slower than viewport-only.
|