Web / index.js
Aqso's picture
Create index.js
cd20e0b verified
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const express = require('express');
const path = require('path');
puppeteer.use(StealthPlugin());
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// UI Sederhana (Frontend)
app.get('/', (req, res) => {
res.send(`
<html>
<head>
<title>AQSO Scraper Engine</title>
<style>body{font-family:sans-serif;padding:20px;background:#1a1a1a;color:#fff}input{padding:10px;width:300px}button{padding:10px;background:#00ff00;border:none;cursor:pointer}pre{background:#000;padding:10px;overflow:auto;max-height:500px;border:1px solid #333}</style>
</head>
<body>
<h1>Web Scraper Engine</h1>
<form action="/scrape" method="POST">
<input type="url" name="url" placeholder="Paste link website di sini..." required>
<button type="submit">SCRAPE SEKARANG</button>
</form>
</body>
</html>
`);
});
app.post('/scrape', async (req, res) => {
const { url } = req.body;
let browser;
try {
browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-gpu'],
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH
});
const page = await browser.newPage();
// Optimasi: Blokir resource berat (Gambar/Font/Media)
await page.setRequestInterception(true);
page.on('request', (req) => {
if(['image', 'stylesheet', 'font', 'media'].includes(req.resourceType())) req.abort();
else req.continue();
});
await page.goto(url, { waitUntil: 'networkidle2', timeout: 90000 });
// Ambil teks bersih & Meta data
const result = await page.evaluate(() => {
return {
title: document.title,
url: window.location.href,
content: document.body.innerText, // Ambil semua teks
links: Array.from(document.querySelectorAll('a')).map(a => a.href)
};
});
res.json({ success: true, data: result });
} catch (e) {
res.status(500).json({ error: e.message });
} finally {
if (browser) await browser.close();
}
});
app.listen(7860, '0.0.0.0', () => console.log('Engine ready on port 7860'));