00Puppeteer on Vercel

4/8/2025
0 replies
35 views
Mehebub Alam

Mehebub Alam

Topic Author

import chromium from “@sparticuz/chromium-min”; import puppeteerCore from “puppeteer-core”; import puppeteer from “puppeteer”; export const dynamic = “force-dynamic”; const remoteExecutablePath = “https://github.com/Sparticuz/chromium/releases/download/v121.0.0/chromium-v121.0.0-pack.tar";let browser; async function getBrowser() { if (browser) return browser; if (process.env.NEXT_PUBLIC_VERCEL_ENVIRONMENT === “production”) { browser = await puppeteerCore.launch({ args: chromium.args, executablePath: await chromium.executablePath(remoteExecutablePath), headless: true, }); } else { browser = await puppeteer.launch({ args: [“ — no-sandbox”, “ — disable-setuid-sandbox”], headless: true, }); } return browser; } async function checkPageStatus(url) { let statusCode; try { const browser = await getBrowser(); const page = await browser.newPage(); const response = await page.goto(url, { waitUntil: “domcontentloaded” }); statusCode = response && response.status() === 200 ? 200 : 404; await page.close(); } catch (error) { console.error(“Error accessing page:”, error); statusCode = 404; } return statusCode === 200; } export async function GET(request) { const { searchParams } = new URL(request.url); const url = searchParams.get(“url”); if (!url) { return new Response( JSON.stringify({ error: “URL parameter is required” }), { status: 400, headers: { “Content-Type”: “application/json” }, } ); } const status = await checkPageStatus(url); return new Response( JSON.stringify({ statusCode: status ? 200 : 404, is200: status, }), { status: status ? 200 : 404, headers: { “Content-Type”: “application/json” }, } ); }
4/8/2025, 3:08:29 PM

Post a Reply