const express = require('express');
const puppeteer = require('puppeteer');
const path = require('path');
const { siteUrl } = require('./config');
const app = express();
let browser, page;
// Tarayıcıyı başlat ve sayfayı hazırla
async function initBrowser() {
if (!browser) {
browser = await puppeteer.launch({
headless: true,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-gpu',
'--disable-blink-features=AutomationControlled',
'--disable-extensions',
'--disable-infobars',
'--disable-dev-shm-usage',
'--disable-popup-blocking',
'--start-maximized',
],
executablePath: path.join(__dirname, 'chromedriver', 'chrome.exe'),
});
page = await browser.newPage();
await page.setUserAgent(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
);
await page.setViewport({ width: 1280, height: 800 });
}
}
// Sayfanın HTML içeriğini tam olarak yükle ve kaynak yollarını düzelt
async function fetchPageContent() {
if (!page) throw new Error('Tarayıcı başlatılamadı!');
// Siteye git ve tam yüklenmesini bekle
await page.goto(siteUrl, { waitUntil: 'networkidle2', timeout: 60000 });
// Dinamik içeriklerin yüklenmesini beklemek için manuel bekleme ekliyoruz
await new Promise((resolve) => setTimeout(resolve, 2000)); // 2 saniye bekle
// Kaynak yollarını düzelt
const content = await page.evaluate((siteUrl) => {
const fixUrl = (url) => {
if (url.startsWith('/')) {
return siteUrl + url;
}
return url;
};
document.querySelectorAll('img').forEach((img) => {
img.src = fixUrl(img.src);
if (img.srcset) {
img.srcset = img.srcset
.split(',')
.map((item) => fixUrl(item.trim()))
.join(', ');
}
});
document.querySelectorAll('link').forEach((link) => {
if (link.href) {
link.href = fixUrl(link.href);
}
});
document.querySelectorAll('script').forEach((script) => {
if (script.src) {
script.src = fixUrl(script.src);
}
});
return document.documentElement.outerHTML;
}, siteUrl);
return content;
}
// Proxy rotası
app.get('/', async (req, res) => {
try {
await initBrowser(); // Tarayıcıyı başlat
const modifiedPage = await fetchPageContent(); // Sayfa içeriğini al
res.send(modifiedPage); // Tam sayfa içeriğini döndür
} catch (error) {
res.status(500).send('Bir hata oluştu: ' + error.message);
}
});
// Sunucuyu başlat
app.listen(5012, () => {
console.log('Proxy server running on [url]http://localhost:5012');[/url]
});
// Sunucu kapatıldığında tarayıcıyı kapat
process.on('SIGINT', async () => {
if (browser) {
await browser.close();
console.log('Tarayıcı kapatıldı.');
}
process.exit();
});Konu kilit: Farklı bir dilde projemi geliştiriyorum