TestAja / server.js
maylinejix's picture
Create server.js
b8b8439 verified
const express = require('express');
const { PuppeterHcaptchaSolve } = require("puppeteer-hcaptcha-solver");
const puppeteer = require("puppeteer");
const app = express();
app.use(express.json());
// Endpoint health check
app.get('/', (req, res) => {
res.json({
status: 'ok',
message: 'hCaptcha Solver API is running',
endpoints: {
solve: 'POST /solve - Body: { url: string, sitekey: string }'
}
});
});
// Endpoint untuk solve hCaptcha
app.post('/solve', async (req, res) => {
const { url, sitekey } = req.body;
if (!url || !sitekey) {
return res.status(400).json({
error: 'Missing required parameters: url and sitekey'
});
}
let browser;
try {
// Launch browser dengan konfigurasi headless
browser = await puppeteer.launch({
headless: true,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--disable-gpu',
'--window-size=1920x1080'
]
});
const captcha = new PuppeterHcaptchaSolve(browser);
const page = await browser.newPage();
await page.setDefaultNavigationTimeout(60000);
// Navigate ke URL
await page.goto(url, {
waitUntil: 'load',
timeout: 60000
});
// Tunggu iframe hCaptcha muncul
await page.waitForSelector("iframe", { timeout: 10000 });
console.log("hCaptcha detected");
// Solve captcha
const token = await captcha.solve(page);
await browser.close();
res.json({
success: true,
token: token,
message: 'hCaptcha solved successfully'
});
} catch (error) {
if (browser) {
await browser.close();
}
console.error('Error solving captcha:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
// Endpoint untuk solve dengan demo hCaptcha
app.get('/solve-demo', async (req, res) => {
let browser;
try {
browser = await puppeteer.launch({
headless: true,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--disable-gpu'
]
});
const captcha = new PuppeterHcaptchaSolve(browser);
const page = await browser.newPage();
await page.setDefaultNavigationTimeout(60000);
await page.goto("https://accounts.hcaptcha.com/demo?sitekey=4c672d35-0701-42b2-88c3-78380b0db560", {
waitUntil: 'load',
timeout: 60000
});
await page.waitForSelector("iframe", { timeout: 10000 });
console.log("hCaptcha detected");
const token = await captcha.solve(page);
await browser.close();
res.json({
success: true,
token: token,
message: 'Demo hCaptcha solved successfully'
});
} catch (error) {
if (browser) {
await browser.close();
}
console.error('Error solving captcha:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
const PORT = process.env.PORT || 7860;
app.listen(PORT, '0.0.0.0', () => {
console.log(`Server running on port ${PORT}`);
});