maylinejix commited on
Commit
b8b8439
·
verified ·
1 Parent(s): 11fa2c2

Create server.js

Browse files
Files changed (1) hide show
  1. server.js +133 -0
server.js ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express');
2
+ const { PuppeterHcaptchaSolve } = require("puppeteer-hcaptcha-solver");
3
+ const puppeteer = require("puppeteer");
4
+
5
+ const app = express();
6
+ app.use(express.json());
7
+
8
+ // Endpoint health check
9
+ app.get('/', (req, res) => {
10
+ res.json({
11
+ status: 'ok',
12
+ message: 'hCaptcha Solver API is running',
13
+ endpoints: {
14
+ solve: 'POST /solve - Body: { url: string, sitekey: string }'
15
+ }
16
+ });
17
+ });
18
+
19
+ // Endpoint untuk solve hCaptcha
20
+ app.post('/solve', async (req, res) => {
21
+ const { url, sitekey } = req.body;
22
+
23
+ if (!url || !sitekey) {
24
+ return res.status(400).json({
25
+ error: 'Missing required parameters: url and sitekey'
26
+ });
27
+ }
28
+
29
+ let browser;
30
+ try {
31
+ // Launch browser dengan konfigurasi headless
32
+ browser = await puppeteer.launch({
33
+ headless: true,
34
+ args: [
35
+ '--no-sandbox',
36
+ '--disable-setuid-sandbox',
37
+ '--disable-dev-shm-usage',
38
+ '--disable-accelerated-2d-canvas',
39
+ '--disable-gpu',
40
+ '--window-size=1920x1080'
41
+ ]
42
+ });
43
+
44
+ const captcha = new PuppeterHcaptchaSolve(browser);
45
+ const page = await browser.newPage();
46
+ await page.setDefaultNavigationTimeout(60000);
47
+
48
+ // Navigate ke URL
49
+ await page.goto(url, {
50
+ waitUntil: 'load',
51
+ timeout: 60000
52
+ });
53
+
54
+ // Tunggu iframe hCaptcha muncul
55
+ await page.waitForSelector("iframe", { timeout: 10000 });
56
+ console.log("hCaptcha detected");
57
+
58
+ // Solve captcha
59
+ const token = await captcha.solve(page);
60
+
61
+ await browser.close();
62
+
63
+ res.json({
64
+ success: true,
65
+ token: token,
66
+ message: 'hCaptcha solved successfully'
67
+ });
68
+
69
+ } catch (error) {
70
+ if (browser) {
71
+ await browser.close();
72
+ }
73
+ console.error('Error solving captcha:', error);
74
+ res.status(500).json({
75
+ success: false,
76
+ error: error.message
77
+ });
78
+ }
79
+ });
80
+
81
+ // Endpoint untuk solve dengan demo hCaptcha
82
+ app.get('/solve-demo', async (req, res) => {
83
+ let browser;
84
+ try {
85
+ browser = await puppeteer.launch({
86
+ headless: true,
87
+ args: [
88
+ '--no-sandbox',
89
+ '--disable-setuid-sandbox',
90
+ '--disable-dev-shm-usage',
91
+ '--disable-accelerated-2d-canvas',
92
+ '--disable-gpu'
93
+ ]
94
+ });
95
+
96
+ const captcha = new PuppeterHcaptchaSolve(browser);
97
+ const page = await browser.newPage();
98
+ await page.setDefaultNavigationTimeout(60000);
99
+
100
+ await page.goto("https://accounts.hcaptcha.com/demo?sitekey=4c672d35-0701-42b2-88c3-78380b0db560", {
101
+ waitUntil: 'load',
102
+ timeout: 60000
103
+ });
104
+
105
+ await page.waitForSelector("iframe", { timeout: 10000 });
106
+ console.log("hCaptcha detected");
107
+
108
+ const token = await captcha.solve(page);
109
+
110
+ await browser.close();
111
+
112
+ res.json({
113
+ success: true,
114
+ token: token,
115
+ message: 'Demo hCaptcha solved successfully'
116
+ });
117
+
118
+ } catch (error) {
119
+ if (browser) {
120
+ await browser.close();
121
+ }
122
+ console.error('Error solving captcha:', error);
123
+ res.status(500).json({
124
+ success: false,
125
+ error: error.message
126
+ });
127
+ }
128
+ });
129
+
130
+ const PORT = process.env.PORT || 7860;
131
+ app.listen(PORT, '0.0.0.0', () => {
132
+ console.log(`Server running on port ${PORT}`);
133
+ });