Files
portal/app/scripts/render-card.cjs
T

37 lines
1.5 KiB
JavaScript
Raw Normal View History

// Usage: node render-card.cjs <url>
// Рендер карточки организации (Яндекс.Карты/2ГИС) локальным Playwright → JSON { html }.
// ВАЖНО: Яндекс.Карты НЕ доходят до networkidle (постоянные фоновые запросы) — поэтому ждём
// domcontentloaded + фиксированную паузу (как рабочий render-yandex-list.cjs), а не networkidle.
// Нужен, чтобы вскрывать яндекс-карточки надёжно (xfetch под нагрузкой их режет → терялся сайт).
const { chromium } = require('playwright');
(async () => {
const url = process.argv[2];
let parsed;
try {
parsed = new URL(url);
} catch (e) {
console.error('bad url');
process.exit(2);
}
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
console.error('bad scheme');
process.exit(2);
}
const browser = await chromium.launch({ headless: true });
try {
const page = await browser.newPage({ locale: 'ru-RU' });
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 45000 });
// Даём подгрузиться блоку контактов (сайт/телефоны рисуются после первого рендера).
await page.waitForTimeout(4500);
const html = await page.content();
process.stdout.write(JSON.stringify({ html }));
} finally {
await browser.close();
}
})().catch((e) => {
console.error(String(e));
process.exit(1);
});