From 1e6ca16dd0b97a3d881ad2ef76896d0692c82607 Mon Sep 17 00:00:00 2001 From: germondai Date: Tue, 2 Jun 2026 15:10:00 +0200 Subject: [PATCH] test: add Cloudflare challenge bypass tests --- packages/browser/tests/cf.ts | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 packages/browser/tests/cf.ts diff --git a/packages/browser/tests/cf.ts b/packages/browser/tests/cf.ts new file mode 100644 index 0000000..aaa681d --- /dev/null +++ b/packages/browser/tests/cf.ts @@ -0,0 +1,59 @@ +import { launchOptions } from "camoufox-js" +import { firefox } from "patchright" + +process.on("uncaughtException", (err) => { + if (err instanceof TypeError && /pageError|location/.test(err.message)) return + console.error("[uncaught]", err.message) + process.exit(1) +}) + +async function main() { + const opts = await launchOptions({ + headless: true, + geoip: true, + humanize: true, + disable_coop: true, + block_webrtc: true, + i_know_what_im_doing: true, + }) + + const browser = await (firefox as any).launch(opts) + const ctx = await browser.newContext({ viewport: null }) + const page = await ctx.newPage() + + console.log("[test] visiting nopecha.com/demo/cloudflare...") + await page + .goto("https://nopecha.com/demo/cloudflare", { + waitUntil: "domcontentloaded", + timeout: 30000, + }) + .catch((e: any) => { + console.log("[test] goto error:", e.message.slice(0, 80)) + }) + + await new Promise((r) => setTimeout(r, 8000)) + await page.waitForLoadState("networkidle", { timeout: 15000 }).catch(() => {}) + + // Try both ways of getting HTML + const htmlFromContent = await page.content().catch(() => "") + const htmlFromEval = await page.evaluate(() => document.documentElement?.outerHTML ?? "").catch(() => "") + + console.log("[test] page.content() length:", htmlFromContent.length) + console.log("[test] page.evaluate() length:", htmlFromEval.length) + console.log("[test] URL:", page.url()) + console.log("[test] Title:", await page.title().catch(() => "?")) + + if (htmlFromEval.length > 100) { + console.log("[test] HTML snippet:", htmlFromEval.slice(0, 300)) + } + + const cookies = await ctx.cookies() + console.log("[test] cookies:", cookies.map((c: any) => c.name).join(", ")) + + await browser.close() +} + +main().catch((e) => { + console.error("[test] FAIL:", e.message) + process.exit(1) +})