• 18-12-2024, 16:16:21
    #1
    Merhaba bir borsa sitesini Örnek: http://localhost:5012/ yazdığım zaman sorunsuz bir şekilde görmek için projem var ama cloudflare gibi güvenlikleri aşamadım kodlarım çok acemi olduğu için tamamen değiştirilebilir. Bu konularda bilgisi olanlardan hizmet almak istiyorum

    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
  • 18-12-2024, 16:29:33
    #2
    @noyz; bu arkadaş gerçekten işinin ehli yardımcı olabilir eğer yoğun degilse.
  • 19-12-2024, 01:31:33
    #3
    puppeteer-extra ve puppeteer-extra-plugin-stealth kullanabilirsin.
    Cloudflare headless tarayıcıları yakalıyor diye biliyorum o yüzden headless kaldırarak deneyebilirsin.
    Sürekli çalıştırıyorsan istekler arasında random süre ekleyerek bot gibi davranmamasını sağlayabilirsin ya da proxy kullanabilirsin.
  • 19-12-2024, 04:35:21
    #4
    windows/system32 deki hosts dosyasına localhost https://xxxxx.com yaptığınızda istediğinizi elde edersiniz.
  • 28-12-2024, 23:00:05
    #5
    Hala ihtiyacınız devam ediyorsa 05079835144 bu numarada ulaşabilirsiniz.
  • 31-12-2024, 17:16:56
    #6
    localhost yerine server ip yi yazman kafi. çözemezseniz destek için pm