const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');
const PuppeteerHar = require('puppeteer-har');
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
const har = new PuppeteerHar(page);
const urls = [
'https://abc.go2020.tokyo/gtm_gtag_new/index.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index1.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index2.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index3.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index4.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index5.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index6.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index7.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index8.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index9.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index10.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index11.html',
'https://abc.go2020.tokyo/gtm_gtag_new/index12.html'
];
for (let i = 0; i < urls.length; i++) {
const url = urls[i];
const harFilename = path.join(__dirname, `page_${i}.har`);
const resourceFolder = path.join(__dirname, `page_${i}_resources`);
fs.mkdirSync(resourceFolder, { recursive: true });
const resourceCounter = {};
const responseHandler = async (response) => {
try {
const responseUrl = response.url();
if (!responseUrl || responseUrl.startsWith('data:')) return;
const parsedUrl = new URL(responseUrl);
let pathname = parsedUrl.pathname;
let baseName = path.basename(pathname) || 'index.html';
if (resourceCounter[baseName] === undefined) {
resourceCounter[baseName] = 1;
} else {
resourceCounter[baseName]++;
const ext = path.extname(baseName);
const nameWithoutExt = path.basename(baseName, ext);
baseName = `${nameWithoutExt}_${resourceCounter[baseName]}${ext}`;
}
const outputPath = path.join(resourceFolder, baseName);
if (fs.existsSync(outputPath)) return;
const buffer = await response.buffer();
fs.writeFileSync(outputPath, buffer);
console.log(`Saved resource: ${outputPath}`);
} catch (err) {
console.error("Error saving resource:", err);
}
};
// レスポンスリスナーの登録
page.on('response', responseHandler);
await har.start({ path: harFilename });
await page.goto(url, { waitUntil: 'networkidle0' });
await har.stop();
// イベントリスナーを解除(修正箇所)
page.off('response', responseHandler);
console.log(`Saved HAR: ${harFilename}`);
}
await browser.close();
})();