captcha / endpoints /cloudflare.js
rezaharis's picture
Update endpoints/cloudflare.js
20165ac verified
async function cloudflare(data, page) {
return new Promise(async (resolve, reject) => {
if (!data.domain) return reject(new Error("Missing domain parameter"))
const startTime = Date.now()
let isResolved = false
let userAgent = null
const timeout = setTimeout(() => {
if (!isResolved) {
isResolved = true
const elapsedTime = (Date.now() - startTime) / 1000
resolve({
cf_clearance: null,
user_agent: userAgent,
elapsed_time: elapsedTime,
})
}
}, 20000)
try {
// Jika pakai proxy
if (data.proxy?.username && data.proxy?.password) {
await page.authenticate({
username: data.proxy.username,
password: data.proxy.password,
})
}
page.removeAllListeners("request")
page.removeAllListeners("response")
await page.setRequestInterception(true)
page.on("request", async (req) => {
try {
await req.continue()
} catch (_) {}
})
page.on("response", async (res) => {
try {
const url = res.url()
if (url.includes("/cdn-cgi/challenge-platform/")) {
const headers = res.headers()
if (headers["set-cookie"]) {
const match = headers["set-cookie"].match(/cf_clearance=([^;]+)/)
if (match) {
const cf_clearance = match[1]
const userAgent = (await res.request().headers())["user-agent"]
const elapsedTime = (Date.now() - startTime) / 1000
if (!isResolved) {
isResolved = true
clearTimeout(timeout)
resolve({
cf_clearance,
user_agent: userAgent,
elapsed_time: elapsedTime,
})
}
}
}
}
} catch (_) {}
})
// 🧩 Tambahan: Set cookie manual (khusus Puppeteer)
if (data.cookies) {
const cookies = []
const domain = new URL(data.domain).hostname
if (typeof data.cookies === "string") {
// contoh: "captcha=recaptchav2; ci_session=xxx; cf_clearance=xxx"
for (const pair of data.cookies.split(";")) {
const [name, value] = pair.trim().split("=")
if (name && value) cookies.push({ name, value, domain })
}
} else if (typeof data.cookies === "object") {
for (const [name, value] of Object.entries(data.cookies)) {
cookies.push({ name, value, domain })
}
}
if (cookies.length) {
await page.setCookie(...cookies)
console.log("✅ Cookies telah diset:", cookies)
}
}
// Akses domain target
await page.goto(data.domain, { waitUntil: "domcontentloaded" })
userAgent = await page.evaluate(() => navigator.userAgent)
} catch (err) {
if (!isResolved) {
isResolved = true
clearTimeout(timeout)
reject(err)
}
}
})
}
module.exports = cloudflare