newservers commited on
Commit
2fa3176
Β·
verified Β·
1 Parent(s): 72deb86

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +38 -10
app.js CHANGED
@@ -2,12 +2,27 @@ const express = require('express');
2
  const puppeteer = require('puppeteer-extra');
3
  const StealthPlugin = require('puppeteer-extra-plugin-stealth');
4
  const randomUseragent = require('random-useragent');
 
 
 
5
 
6
  puppeteer.use(StealthPlugin());
7
 
8
  const app = express();
9
  app.use(express.json());
10
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  app.post('/login', async (req, res) => {
12
  const { email, password } = req.body;
13
 
@@ -33,16 +48,11 @@ app.post('/login', async (req, res) => {
33
 
34
  const page = await browser.newPage();
35
 
36
- // πŸŒ€ Rotate realistic user-agent
37
  const userAgent = randomUseragent.getRandom();
38
  await page.setUserAgent(userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
39
 
40
- // πŸ›‘οΈ Set spoofed headers
41
- await page.setExtraHTTPHeaders({
42
- 'Accept-Language': 'en-US,en;q=0.9',
43
- });
44
 
45
- // 🚫 Block unnecessary resources
46
  await page.setRequestInterception(true);
47
  page.on('request', (req) => {
48
  const type = req.resourceType();
@@ -53,7 +63,6 @@ app.post('/login', async (req, res) => {
53
  }
54
  });
55
 
56
- // 🎭 Spoof browser fingerprints
57
  await page.evaluateOnNewDocument(() => {
58
  Object.defineProperty(navigator, 'webdriver', { get: () => false });
59
  Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] });
@@ -61,7 +70,6 @@ app.post('/login', async (req, res) => {
61
  Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });
62
  });
63
 
64
- // 🌐 Go to login page
65
  await page.goto('https://sso.crunchyroll.com/login', {
66
  waitUntil: 'networkidle2',
67
  timeout: 60000,
@@ -74,17 +82,37 @@ app.post('/login', async (req, res) => {
74
  await page.type('input[name="password"]', password, { delay: 80 });
75
 
76
  await page.waitForSelector('button[data-t="login-button"]', { visible: true });
 
 
 
 
 
 
 
 
 
77
  await page.click('button[data-t="login-button"]');
78
-
79
  await page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 60000 });
80
 
 
 
 
 
 
 
 
 
81
  const url = page.url();
82
  const loginSuccess = !url.includes('/login');
83
 
84
  res.json({
85
  success: loginSuccess,
86
  currentUrl: url,
87
- userAgent: userAgent
 
 
 
 
88
  });
89
 
90
  } catch (err) {
 
2
  const puppeteer = require('puppeteer-extra');
3
  const StealthPlugin = require('puppeteer-extra-plugin-stealth');
4
  const randomUseragent = require('random-useragent');
5
+ const axios = require('axios');
6
+ const fs = require('fs');
7
+ const FormData = require('form-data');
8
 
9
  puppeteer.use(StealthPlugin());
10
 
11
  const app = express();
12
  app.use(express.json());
13
 
14
+ async function uploadToCatbox(filePath) {
15
+ const form = new FormData();
16
+ form.append('reqtype', 'fileupload');
17
+ form.append('fileToUpload', fs.createReadStream(filePath));
18
+
19
+ const response = await axios.post('https://catbox.moe/user/api.php', form, {
20
+ headers: form.getHeaders(),
21
+ });
22
+
23
+ return response.data; // returns the image URL
24
+ }
25
+
26
  app.post('/login', async (req, res) => {
27
  const { email, password } = req.body;
28
 
 
48
 
49
  const page = await browser.newPage();
50
 
 
51
  const userAgent = randomUseragent.getRandom();
52
  await page.setUserAgent(userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
53
 
54
+ await page.setExtraHTTPHeaders({ 'Accept-Language': 'en-US,en;q=0.9' });
 
 
 
55
 
 
56
  await page.setRequestInterception(true);
57
  page.on('request', (req) => {
58
  const type = req.resourceType();
 
63
  }
64
  });
65
 
 
66
  await page.evaluateOnNewDocument(() => {
67
  Object.defineProperty(navigator, 'webdriver', { get: () => false });
68
  Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] });
 
70
  Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });
71
  });
72
 
 
73
  await page.goto('https://sso.crunchyroll.com/login', {
74
  waitUntil: 'networkidle2',
75
  timeout: 60000,
 
82
  await page.type('input[name="password"]', password, { delay: 80 });
83
 
84
  await page.waitForSelector('button[data-t="login-button"]', { visible: true });
85
+
86
+ // Screenshot before clicking login
87
+ const beforePath = './before-login.png';
88
+ await page.screenshot({ path: beforePath });
89
+
90
+ // Upload before screenshot
91
+ const beforeUrl = await uploadToCatbox(beforePath);
92
+ console.log('🟑 Before login screenshot uploaded:', beforeUrl);
93
+
94
  await page.click('button[data-t="login-button"]');
 
95
  await page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 60000 });
96
 
97
+ // Screenshot after login
98
+ const afterPath = './after-login.png';
99
+ await page.screenshot({ path: afterPath });
100
+
101
+ // Upload after screenshot
102
+ const afterUrl = await uploadToCatbox(afterPath);
103
+ console.log('🟒 After login screenshot uploaded:', afterUrl);
104
+
105
  const url = page.url();
106
  const loginSuccess = !url.includes('/login');
107
 
108
  res.json({
109
  success: loginSuccess,
110
  currentUrl: url,
111
+ userAgent: userAgent,
112
+ screenshots: {
113
+ before: beforeUrl,
114
+ after: afterUrl
115
+ }
116
  });
117
 
118
  } catch (err) {