2024-08-04 08:28:19 +08:00
|
|
|
import assert from 'node:assert';
|
|
|
|
import puppeteer, { type Viewport } from 'puppeteer';
|
2024-07-28 08:49:57 +08:00
|
|
|
|
|
|
|
export async function launchPage(
|
|
|
|
url: string,
|
|
|
|
opt?: {
|
|
|
|
viewport?: Viewport;
|
|
|
|
},
|
|
|
|
) {
|
|
|
|
const browser = await puppeteer.launch({
|
2024-08-01 16:07:58 +08:00
|
|
|
// headless: false,
|
2024-07-28 08:49:57 +08:00
|
|
|
});
|
|
|
|
|
2024-08-01 16:07:58 +08:00
|
|
|
const page = await browser.newPage();
|
2024-07-28 08:49:57 +08:00
|
|
|
const viewportConfig = {
|
|
|
|
width: opt?.viewport?.width || 1920,
|
|
|
|
height: opt?.viewport?.height || 1080,
|
|
|
|
deviceScaleFactor: opt?.viewport?.deviceScaleFactor || 1,
|
|
|
|
};
|
|
|
|
await page.setViewport(viewportConfig);
|
|
|
|
await Promise.all([
|
|
|
|
page.waitForNavigation({
|
|
|
|
timeout: 20 * 1000,
|
|
|
|
waitUntil: 'networkidle0',
|
|
|
|
}),
|
|
|
|
(async () => {
|
|
|
|
const response = await page.goto(url);
|
|
|
|
if (response?.status) {
|
2024-08-04 08:28:19 +08:00
|
|
|
assert(
|
|
|
|
response.status() <= 399,
|
|
|
|
`Page load failed: ${response.status()}`,
|
|
|
|
);
|
2024-07-28 08:49:57 +08:00
|
|
|
}
|
|
|
|
})(),
|
|
|
|
]);
|
|
|
|
|
2024-08-21 17:24:32 +08:00
|
|
|
return {
|
|
|
|
page,
|
|
|
|
reset: async () => {
|
|
|
|
await browser.close();
|
|
|
|
},
|
|
|
|
};
|
2024-07-28 08:49:57 +08:00
|
|
|
}
|