npx playwright codegen https://example.com記事:
screenshot: ## Take a panel screenshot (GF_URL=... GF_TOKEN=... OUTPUT=panel.png) mkdir -p screenshots docker run --rm \ --network host \ -v "$(PWD)/screenshots":/screenshots \ -v "$(PWD)/screenshot.cjs":/screenshot.cjs \ -v playwright-npm:/tmp/node_modules \ -e "GF_TOKEN=$(GF_TOKEN)" \ -e "GF_URL=$(GF_URL)" \ -e "GF_OUTPUT=/screenshots/$(OUTPUT)" \ mcr.microsoft.com/playwright:v1.58.2 \ sh -c 'cd /tmp && npm install playwright 2>/dev/null && NODE_PATH=/tmp/node_modules node /screenshot.cjs'
const { chromium } = require("playwright"); (async () => { if (!process.env.GF_URL) { console.error("GF_URL is required"); process.exit(1); } const output = process.env.GF_OUTPUT || "/screenshots/panel.png"; const browser = await chromium.launch(); const page = await browser.newPage(); await page.setExtraHTTPHeaders({ Authorization: `Bearer ${process.env.GF_TOKEN}` }); await page.goto(process.env.GF_URL, { waitUntil: "load" }); await page.waitForLoadState("networkidle"); // Scroll to bottom to trigger lazy loading of all panels await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight)); await page.waitForTimeout(2000); await page.evaluate(() => window.scrollTo(0, 0)); await page.waitForTimeout(500); await page.screenshot({ path: output, fullPage: true }); await browser.close(); })();
GF_URL="http://localhost:3000/?orgId=1" # dashbord/panel URL read -sp "GF_TOKEN: " GF_TOKEN make screenshot GF_URL="${GF_URL}" GF_TOKEN="${GF_TOKEN}" OUTPUT=panel.png # 成功すれば screenshots/panel.png が出来る