跳到主要内容
知仓学习社ZHICANG

full-page-screenshot

Use when the user asks to capture a full-page screenshot, long screenshot, or complete page capture of a web page. Handles SPA scroll containers, la…

读凭据执行命令读文件写文件联网严重 0 · 高危 8alirezarezvani/claude-skills

它会碰到什么

扫了多少2 个文本文件,39 KB
它会碰到什么读凭据执行命令读文件写文件联网
命中总数20 处
命中统计严重 0 · 高 8 · 中 12 · 低 0
逐条看命中(8 条严重或高危)
  • scripts/full-page-screenshot.mjs:63cred-envread
    const local = process.env.LOCALAPPDATA || '';
  • scripts/full-page-screenshot.mjs:430exec-spawn
    const { execSync } = await import('child_process');
  • scripts/full-page-screenshot.mjs:430exec-spawn
    const { execSync } = await import('child_process');
  • scripts/full-page-screenshot.mjs:445exec-spawn
    const result = execSync(`python3 "${stitchScriptPath}"`, { encoding: 'utf-8', timeout: 60000 });
  • scripts/full-page-screenshot.mjs:772exec-spawn
    const { execSync } = await import('child_process');
  • scripts/full-page-screenshot.mjs:772exec-spawn
    const { execSync } = await import('child_process');
  • scripts/full-page-screenshot.mjs:774exec-spawn
    const sipsOut = execSync(`sips -g pixelWidth -g pixelHeight "${tiles[0].path}"`, { encoding: 'utf-8' });
  • scripts/full-page-screenshot.mjs:836exec-spawn
    const result = execSync(`python3 "${stitchScriptPath}"`, { encoding: 'utf-8', timeout: 60000 });

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Full Page Screenshot

Capture a full-page screenshot of any web page via Chrome DevTools Protocol. Produces a single PNG that includes all content — even portions that require scrolling. Zero external dependencies beyond Node.js 22+ and Chrome with remote debugging enabled.

Prerequisites

  • Node.js 22+ (uses built-in WebSocket)
  • Chrome/Chromium with remote debugging enabled

Check environment readiness:

node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" --check

If Chrome check fails, instruct user to open chrome://inspect/#remote-debugging and enable "Allow remote debugging for this browser instance".

Workflow

Option A: Screenshot an already-open tab (recommended for authenticated pages)

  1. List available tabs:
node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" --list
  1. Identify the target by title/URL, then capture:
node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" <targetId> /tmp/screenshot.png --width 1200 --dpr 1

Option B: Screenshot a URL (opens a background tab, captures, closes)

node "${SKILL_DIR}/scripts/full-page-screenshot.mjs" --url "https://example.com" /tmp/screenshot.png --width 1200 --dpr 1 --wait 15000

> Note: --url mode creates a background tab. Pages requiring authentication (SSO, login walls) should use Option A instead.

Parameters

| Parameter | Description | Default |

|-----------|-------------|---------|

| output | Output PNG file path | /tmp/screenshot.png |

| --width | Viewport width in CSS pixels (articles: 1200, dashboards: 1440-1920) | 1200 |

| --dpr | Device pixel ratio (2 = Retina, but 4x file size) | 1 |

| --wait | Page load timeout in ms (--url mode only) | 15000 |

| --css | Custom CSS to inject before capture (e.g., hide elements) | — |

Verify Output

# macOS
sips -g pixelWidth -g pixelHeight /tmp/screenshot.png

# Linux
file /tmp/screenshot.png

Core Capabilities

  1. SPA scroll container expansion — Detects overflow-y: auto/scroll containers, scrolls through them to trigger lazy-loading, then removes overflow constraints (including Tailwind h-[calc(...)]) so all content renders in a single pass.
  1. DOM stability detection — After readyState=complete, monitors DOM element count until it stabilizes. This ensures SPA frameworks finish rendering dynamic content.
  1. Lazy-load triggering — Scrolls the viewport incrementally to fire IntersectionObserver callbacks, then waits for all <img> elements to complete loading.
  1. Tiled capture for very tall pages — Pages exceeding 16,000px are captured in 8,000px tiles and automatically stitched using Python PIL. Falls back to saving tiles separately if PIL is unavailable.
  1. Auto-discovery of Chrome — Reads DevToolsActivePort file to find the debugging port. Falls back to probing ports 9222, 9229, 9333.
  1. CDP Proxy fallback — When a CDP proxy holds the browser WebSocket, the script falls back to proxy API endpoints (/eval, /screenshot, /scroll) for capture.

How It Works

1. Discover Chrome debugging port
2. Connect via WebSocket (CDP)
3. Attach to target / create background tab
4. Set viewport width via Emulation domain
5. Wait: readyState + DOM stability
6. Detect & expand scroll containers
7. Scroll through page (trigger lazy-load)
8. Wait for images to complete
9. Measure final content height
10. Page.captureScreenshot (or tiled capture)
11. Stitch tiles if needed (PIL)
12. Restore viewport, detach, clean up

Anti-Patterns

| Do NOT | Do instead |

|--------|-----------|

| Use --dpr 2 on pages > 10,000px tall | Use --dpr 1 to avoid Chrome memory issues |

| Use --url for authenticated/SSO pages | Use --list + targetId on a tab where user is logged in |

| Set --wait below 5000 for SPAs | SPAs need time to fetch data and render; use 10000-15000 |

| Capture without checking --check first | Always verify Chrome debugging is available |

| Hardcode viewport widths for all pages | Use 1200 for articles, 1440+ for dashboards/tables |

| Skip output verification | Always verify with sips or file command after capture |

Troubleshooting

| Symptom | Cause | Fix |

|---------|-------|-----|

| "Cannot find Chrome debugging port" | Remote debugging not enabled | Open chrome://inspect/#remote-debugging, enable it |

| "WebSocket connection timeout" | CDP proxy holding the connection | Script auto-falls back to proxy API |

| Blank/white screenshot | Page not loaded yet | Increase --wait value |

| Truncated at bottom | Scroll container not expanded | Script handles this automatically; file an issue if it persists |

| Out of memory | Very tall page + high DPR | Reduce --dpr to 1 and/or reduce --width |

| "PIL not available for stitching" | Python Pillow not installed | Install with pip3 install Pillow or accept separate tile files |

Cross-References

  • [engineering/browser-automation](../browser-automation/SKILL.md) — General browser automation patterns via CDP/Playwright
  • [engineering/performance-profiler](../performance-profiler/SKILL.md) — Performance analysis that may complement visual captures

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

它属于哪个仓库

星标★ 26,030
本站分层T1
该仓技能数846
原文件路径engineering/skills/full-page-screenshot/SKILL.md

同一个仓库里的其他技能

看这个仓库的全部 846 个技能

同名技能的其他版本

有 2 个不同仓库或目录里都有叫 full-page-screenshot 的技能。它们内容并不相同,别混用: