From d889b60e2a8fd43ef3563436c7af4c0b5dfca86d Mon Sep 17 00:00:00 2001 From: DIYgod Date: Wed, 27 Aug 2025 17:13:18 +0800 Subject: [PATCH] refactor(profile): replace puppeteerGet with getPuppeteerPage for improved request handling and remove unused utils file --- lib/routes/picuki/profile.ts | 18 +++++++++++++----- lib/routes/picuki/utils.ts | 19 ------------------- 2 files changed, 13 insertions(+), 24 deletions(-) delete mode 100644 lib/routes/picuki/utils.ts diff --git a/lib/routes/picuki/profile.ts b/lib/routes/picuki/profile.ts index 324390333..7b1f01b0e 100644 --- a/lib/routes/picuki/profile.ts +++ b/lib/routes/picuki/profile.ts @@ -6,8 +6,7 @@ import ofetch from '@/utils/ofetch'; import { art } from '@/utils/render'; import path from 'node:path'; import { config } from '@/config'; -import { puppeteerGet } from './utils'; -import puppeteer from '@/utils/puppeteer'; +import { getPuppeteerPage } from '@/utils/puppeteer'; import NotFoundError from '@/errors/types/not-found'; export const route: Route = { @@ -87,9 +86,18 @@ async function handler(ctx) { }); } catch (error) { if (error.status === 403) { - const browser = await puppeteer(); - response = await puppeteerGet(profileUrl, browser); - await browser.close(); + const { page, destory } = await getPuppeteerPage(profileUrl, { + onBeforeLoad: async (page) => { + const expectResourceTypes = new Set(['document', 'script', 'xhr', 'fetch']); + await page.setRequestInterception(true); + page.on('request', (request) => { + expectResourceTypes.has(request.resourceType()) ? request.continue() : request.abort(); + }); + }, + }); + await page.waitForSelector('.content'); + response = await page.content(); + await destory(); } else { throw new NotFoundError(error.message); } diff --git a/lib/routes/picuki/utils.ts b/lib/routes/picuki/utils.ts deleted file mode 100644 index 1a4a82828..000000000 --- a/lib/routes/picuki/utils.ts +++ /dev/null @@ -1,19 +0,0 @@ -const puppeteerGet = async (url, browser) => { - const page = await browser.newPage(); - const expectResourceTypes = new Set(['document', 'script', 'xhr', 'fetch']); - await page.setRequestInterception(true); - page.on('request', (request) => { - expectResourceTypes.has(request.resourceType()) ? request.continue() : request.abort(); - }); - await page.goto(url, { - waitUntil: 'domcontentloaded', - }); - - await page.waitForSelector('.content'); - - const html = await page.content(); - await page.close(); - return html; -}; - -export { puppeteerGet };