house-data-collect/scripts/screenshot.js
2026-04-07 16:25:09 +08:00

84 lines
2.2 KiB
JavaScript

/**
* 截图脚本 - 使用 Playwright
*/
const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
const BASE_DIR = path.resolve(process.env.BASE_DIR || process.cwd());
const PIC_DIR = path.join(BASE_DIR, 'pic');
const TARGET_URL = 'http://bjjs.zjw.beijing.gov.cn/eportal/ui?pageId=307749';
function formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
// 口径调整:当天执行时,落地图按前一天日期命名
function getDataDate() {
const date = new Date();
date.setDate(date.getDate() - 1);
return formatDate(date);
}
async function screenshot(url, outputPath) {
console.log(`正在截图: ${url}`);
console.log(`输出路径: ${outputPath}`);
const browser = await chromium.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
try {
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 }
});
const page = await context.newPage();
// 设置超时
page.setDefaultTimeout(60000);
page.setDefaultNavigationTimeout(60000);
// 访问页面
await page.goto(url, {
waitUntil: 'networkidle',
timeout: 60000
});
// 等待页面加载完成
await page.waitForLoadState('domcontentloaded');
// 额外等待3秒确保动态内容加载
await page.waitForTimeout(3000);
// 确保输出目录存在
const outputDir = path.dirname(outputPath);
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
// 截图
await page.screenshot({
path: outputPath,
fullPage: true
});
console.log(` ✓ 截图已保存: ${outputPath}`);
} catch (error) {
console.error(` ✗ 截图失败: ${error.message}`);
process.exit(1);
} finally {
await browser.close();
}
}
// 主程序
screenshot(TARGET_URL, path.join(PIC_DIR, `${getDataDate()}.png`));