• 05-05-2025, 12:08:03
    #10
    mesajım bulunsun
  • 05-05-2025, 14:47:54
    #11
    PythonCoder26 adlı üyeden alıntı: mesajı görüntüle
    Merhabalar arkadaşlar , Daha önce kullandığım pyhon ile yazılmış Google Analytics e tamı tamına yansıyan kodlarımı veriyorum, artık kullanmıyorum requestte gectiğim için.


    import asyncio
    from playwright.async_api import async_playwright
    import random
    import time
    import logging
    import argparse
    import os
    import sys
    import subprocess
    import json
    from datetime import datetime
    from urllib.parse import urlparse
    import ssl
    
    
    ssl._create_default_https_context = ssl._create_unverified_context
    
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s',
        handlers=[
            logging.FileHandler(f"analytics_traffic_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log", encoding='utf-8'),
            logging.StreamHandler()
        ]
    )
    logger = logging.getLogger()
    
    class ProxyManager:
        def __init__(self, proxy_file):
            """
            
            Args:
                proxy_file (str): Proxy dosyasının yolu
            """
            self.proxy_file = proxy_file
            self.proxies = []
            self.working_proxies = []  
            self.load_proxies()
            
            if not self.proxies:
                logger.error(f"Proxy bulunamadi! Lutfen {proxy_file} dosyasini kontrol edin.")
                raise FileNotFoundError(f"Proxy dosyası bulunamadı veya boş: {proxy_file}")
        
        def load_proxies(self):
            """Dosyadan proxy'leri yükler"""
            try:
                with open(self.proxy_file, 'r') as file:
                    for line in file:
                        line = line.strip()
                        if line:
                            try:
                              
                                parts = line.split(':')
                                if len(parts) >= 4:
                                    host = parts[0]
                                    port = parts[1]
                                    username = parts[2]
                                    password = ':'.join(parts[3:])  
                                    
                                    
                                    self.proxies.append({
                                        "server": f"http://{host}:{port}",
                                        "username": username,
                                        "password": password,
                                        "original": line
                                    })
                                else:
                                    logger.warning(f"Gecersiz proxy formati: {line}")
                            except Exception as e:
                                logger.error(f"Proxy ayristirma hatasi: {e} - Satir: {line}")
                
                logger.info(f"Toplam {len(self.proxies)} proxy okundu.")
                
                
                self.working_proxies = self.proxies
                
            except Exception as e:
                logger.error(f"Dosya okuma hatasi: {e}")
        
        async def test_proxies(self, max_test=10):
            """
            
            """
            logger.info("Proxy testi atlanıyor, tüm proxy'lerin çalıştığı varsayılıyor...")
            # Tüm proxy'lerin çalıştığını varsay
            self.working_proxies = self.proxies
        
        def get_random_proxy(self):
            """Rastgele bir proxy döndürür"""
            if not self.proxies:
                return None
            return random.choice(self.proxies)
        
        def get_proxies_for_sessions(self, num_sessions):
          
            if len(self.proxies) < num_sessions:
                # Proxy sayısı yetersizse, tekrar kullan
                return [self.proxies[i % len(self.proxies)] for i in range(num_sessions)]
            else:
                # Rastgele num_sessions kadar proxy seç
                return random.sample(self.proxies, num_sessions)
        
        def mask_proxy_url(self, proxy_info):
          
            if not proxy_info:
                return "Proxy yok"
            
            try:
                server = proxy_info["server"]
                username = proxy_info["username"]
                
                
                masked_username = username[:3] + '*' * (len(username) - 3) if len(username) > 3 else username
                
                
                parsed = urlparse(server)
                host_port = f"{parsed.netloc}"
                
                return f"{parsed.scheme}://{masked_username}:******@{host_port}"
            except:
                return str(proxy_info)
    
    class UserAgentManager:
        def __init__(self):
            """User-Agent yönetim sınıfı""
            self.user_agents = [
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0',
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15',
                'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36',
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36',
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0',
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0',
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55'
            ]
            
            
            try:
                from fake_useragent import UserAgent
                self.ua = UserAgent()
                logger.info("Fake UserAgent basariyla baslatildi.")
                self.has_fake_ua = True
            except Exception as e:
                logger.warning(f"Fake UserAgent baslatma hatasi: {e}")
                logger.warning("Onceden tanimlanmis user agent'lar kullanilacak.")
                self.has_fake_ua = False
        
        def get_random_user_agent(self):
            """Rastgele bir User-Agent döndürür"""
            if hasattr(self, 'has_fake_ua') and self.has_fake_ua:
                try:
                    return self.ua.random
                except:
                    pass
            return random.choice(self.user_agents)
    
    class PlaywrightManager:
        def __init__(self, target_urls, proxy_file, num_sessions=2000, visit_duration=60, page_interaction=True, browser_type="all"):
            """
            
            
            Args:
                target_urls (list): Ziyaret edilecek URL'ler listesi
                proxy_file (str): Proxy dosyasının yolu
                num_sessions (int): Oturum sayısı
                visit_duration (int): Her sayfada kalma süresi (saniye)
                page_interaction (bool): Sayfa ile etkileşim kurulsun mu?
                browser_type (str): Kullanılacak tarayıcı tipi ("all", "chromium", "firefox", "webkit")
            """
            self.target_urls = target_urls if isinstance(target_urls, list) else [target_urls]
            self.proxy_manager = ProxyManager(proxy_file)
            self.ua_manager = UserAgentManager()
            self.num_sessions = num_sessions
            self.visit_duration = visit_duration
            self.page_interaction = page_interaction
            self.browser_type = browser_type
            self.session_stats = {i: {"success": 0, "failed": 0} for i in range(num_sessions)}
            self.total_visits = 0
            self.start_time = None
            self.browsers = []
            self.tasks = []
        
        async def check_playwright_browsers(self):
          
            try:
                # Tarayıcıların kurulu olup olmadığını kontrol et
                result = subprocess.run(
                    ["playwright", "install", "--dry-run"],
                    capture_output=True,
                    text=True
                )
                
              
                if "Browsers are already installed" not in result.stdout:
                    logger.warning("Playwright tarayıcıları kurulu değil!")
                    logger.info("Tarayıcılar indiriliyor... Bu işlem birkaç dakika sürebilir.")
                    
                    install_process = subprocess.run(
                        ["playwright", "install"],
                        capture_output=True,
                        text=True
                    )
                    
                    if install_process.returncode == 0:
                        logger.info("Tarayıcılar başarıyla kuruldu!")
                    else:
                        logger.error("Tarayıcı kurulumu başarısız oldu!")
                        logger.error(install_process.stderr)
                        logger.info("Lütfen manuel olarak 'playwright install' komutunu çalıştırın.")
                        sys.exit(1)
                else:
                    logger.info("Playwright tarayıcıları zaten kurulu.")
            
            except Exception as e:
                logger.error(f"Tarayıcı kontrolü sırasında hata: {e}")
                logger.info("Lütfen manuel olarak 'playwright install' komutunu çalıştırın.")
                sys.exit(1)
        
        async def setup_browser(self, playwright, proxy_info, user_agent, session_id):
            """
            
            
            Args:
                playwright: Playwright nesnesi
                proxy_info (dict): Proxy bilgileri
                user_agent (str): User-Agent
                session_id (int): Oturum ID'si
            
            Returns:
                tuple: (browser, context) tarayıcı ve bağlam nesneleri
            """
            try:
                # Tarayıcı tipini seç
                if self.browser_type == "all":
                    browser_types = ["chromium", "firefox", "webkit"]
                    browser_weights = [0.7, 0.2, 0.1]  # Chromium daha yaygın
                    browser_type = random.choices(browser_types, weights=browser_weights, k=1)[0]
                else:
                    browser_type = self.browser_type
                
                l
                if browser_type == "chromium":
                    browser_obj = playwright.chromium
                elif browser_type == "firefox":
                    browser_obj = playwright.firefox
                else:
                    browser_obj = playwright.webkit
                
                
                browser = await browser_obj.launch(
                    headless=True,  # Görünmez modda çalıştır
                    slow_mo=50,     # İşlemleri yavaşlat (ms)
                    args=[
                        '--disable-extensions',
                        '--disable-gpu',
                        '--disable-dev-shm-usage',
                        '--no-sandbox',
                        '--disable-web-security'
                    ]
                )
                
                
                context = await browser.new_context(
                    proxy={
                        "server": proxy_info["server"],
                        "username": proxy_info["username"],
                        "password": proxy_info["password"]
                    },
                    user_agent=user_agent,
                    viewport={"width": 1366, "height": 768},
                    locale="tr-TR",  # Türkçe dil ayarı
                    timezone_id="Europe/Istanbul",  # Türkiye zaman dilimi
                    geolocation={"latitude": 31.995408, "longitude": 36.544443},  # İstanbul konumu
                    permissions=["geolocation", "notifications"]  # İzinler
                )
                
                
                await context.add_init_script("""
                    Object.defineProperty(navigator, 'webdriver', {
                        get: () => false,
                    });
                """)
                
                logger.info(f"Oturum #{session_id+1} - {browser_type.capitalize()} tarayıcı başlatıldı")
                return browser, context
            
            except Exception as e:
                logger.error(f"Oturum #{session_id+1} - Tarayıcı başlatma hatası: {e}")
                return None, None
        
        async def interact_with_page(self, page):
            """
            Sayfa ile etkileşim kurar (scroll, tıklama vb.)
            
            Args:
                page: Playwright page nesnesi
            """
            try:
              
                for _ in range(random.randint(2, 5)):
                    await page.evaluate("window.scrollBy(0, window.innerHeight / 2)")
                    await asyncio.sleep(random.uniform(1, 2))
                
                
                await page.evaluate("window.scrollTo(0, 0)")
                await asyncio.sleep(random.uniform(0.5, 1))
                
              
                try:
                    links = await page.query_selector_all('a[href^="/"], a[href^="http"]')
                    if links and random.random() < 0.3:  # %30 ihtimalle bir linke tıkla
                        random_link = random.choice(links)
                        try:
                          
                            async with page.expect_navigation(timeout=10000, wait_until="domcontentloaded"):
                                await random_link.click()
                            
                          
                            await asyncio.sleep(random.uniform(3, 5))
                            
                          
                            await page.go_back()
                            await asyncio.sleep(random.uniform(1, 2))
                        except Exception as e:
                            logger.debug(f"Link tıklama hatası: {e}")
                except Exception as e:
                    logger.debug(f"Link seçme hatası: {e}")
            
            except Exception as e:
                logger.debug(f"Sayfa etkileşim hatası: {e}")
        
        async def custom_page_load_strategy(self, page, url):
            """
            
            
            Args:
                page: Playwright page nesnesi
                url (str): Ziyaret edilecek URL
                
            Returns:
                bool: Başarılı ise True, değilse False
            """
            try:
                # Temel navigasyon - minimum bekleme ile
                await page.goto(url, wait_until="commit", timeout=20000)
                
                
                for _ in range(30):  # Maksimum 30 saniye bekle
                    # Sayfa hazır mı kontrol et
                    is_ready = await page.evaluate("""() => {
                        return document.readyState === 'complete' || document.readyState === 'interactive';
                    }""")
                    
                    if is_ready:
                        
                        has_content = await page.evaluate("""() => {
                            return !!document.querySelector('body') &&
                                   document.body.innerHTML.length > 500;
                        }""")
                        
                        if has_content:
                            return True
                    
                    # 1 saniye bekle ve tekrar dene
                    await asyncio.sleep(1)
                
                return False
            except Exception as e:
                logger.error(f"Özel yükleme stratejisi hatası: {e}")
                return False
        
        async def visit_url(self, context, url, session_id):
            """
            Belirtilen URL'yi ziyaret eder - İyileştirilmiş sürüm
            
            Args:
                context: Playwright context nesnesi
                url (str): Ziyaret edilecek URL
                session_id (int): Oturum ID'si
            
            Returns:
                bool: Başarılı ise True, değilse False
            """
            try:
                # Yeni sayfa oluştur
                page = await context.new_page()
                
                
                start_time = time.time()
                
                i
                try:
                    
                    response = await page.goto(
                        url,
                        wait_until="domcontentloaded",
                        timeout=40000
                    )
                except Exception as e:
                    logger.warning(f"Oturum #{session_id+1} - domcontentloaded ile yükleme başarısız: {e}")
                    # Başarısız olursa, commit ile dene
                    try:
                        response = await page.goto(
                            url,
                            wait_until="commit",
                            timeout=20000
                        )
                    except Exception as e2:
                        logger.error(f"Oturum #{session_id+1} - Sayfa yükleme tamamen başarısız: {e2}")
                        self.session_stats[session_id]["failed"] += 1
                        await page.close()
                        return False
                
                # Yükleme süresini hesapla
                load_time = time.time() - start_time
                
                if not response:
                    logger.warning(f"Oturum #{session_id+1} - Yanıt alınamadı: {url}")
                    self.session_stats[session_id]["failed"] += 1
                    await page.close()
                    return False
                
                status = response.status
                
                if 200 <= status < 400:
                    # Sayfa başlığını al
                    title = await page.title()
                    
                    logger.info(f"Oturum #{session_id+1} - Başarılı ziyaret - {url} - Durum: {status} - Yükleme: {load_time:.2f}s - Başlık: {title}")
                    
                    # Sayfanın yüklenmesi için ek bekleme
                    try:
                        # Sayfa içeriğinin görünür olmasını bekle
                        await page.wait_for_selector('body', timeout=10000)
                        
                        # Sayfanın stabil olması için biraz bekle
                        await asyncio.sleep(3)
                    except Exception as e:
                        logger.warning(f"Oturum #{session_id+1} - Sayfa içeriği bekleme hatası: {e}")
                    
                    
                    await asyncio.sleep(3)
                    
                  
                    if self.page_interaction:
                        await self.interact_with_page(page)
                    
                    
                    await asyncio.sleep(self.visit_duration)
                    
                  
                    try:
                        has_analytics = await page.evaluate("""() => {
                            return !!(
                                window.ga ||
                                window.gtag ||
                                window.dataLayer ||
                                window.google_tag_manager ||
                                document.querySelector('script[src*="google-analytics.com"]') ||
                                document.querySelector('script[src*="googletagmanager.com"]')
                            );
                        }""", timeout=5000)
                        
                        if has_analytics:
                            logger.info(f"Oturum #{session_id+1} - Google Analytics tespit edildi: {url}")
                    except Exception as e:
                        logger.debug(f"Oturum #{session_id+1} - Analytics kontrolü hatası: {e}")
                    
                    self.session_stats[session_id]["success"] += 1
                    await page.close()
                    return True
                else:
                    logger.warning(f"Oturum #{session_id+1} - Başarısız ziyaret - {url} - Durum: {status}")
                    self.session_stats[session_id]["failed"] += 1
                    await page.close()
                    return False
            
            except Exception as e:
                logger.error(f"Oturum #{session_id+1} - Ziyaret hatası - {url}: {e}")
                self.session_stats[session_id]["failed"] += 1
                return False
        
        async def run_session(self, playwright, session_id):
            """
            Bir oturumu çalıştırır
            
            Args:
                playwright: Playwright nesnesi
                session_id (int): Oturum ID'si
            """
            # Proxy ve User-Agent seç
            proxy_info = self.proxy_manager.get_random_proxy()
            user_agent = self.ua_manager.get_random_user_agent()
            
            if not proxy_info:
                logger.error(f"Oturum #{session_id+1} - Proxy bulunamadı!")
                return
            
          
            masked_proxy = self.proxy_manager.mask_proxy_url(proxy_info)
            logger.info(f"Oturum #{session_id+1} - Proxy: {masked_proxy}")
            
          
            browser, context = await self.setup_browser(playwright, proxy_info, user_agent, session_id)
            
            if not browser or not context:
                return
            
            self.browsers.append((browser, context))
            
            try:
                
                for url in self.target_urls:
                    success = await self.visit_url(context, url, session_id)
                    self.total_visits += 1
                    
                  
                    if success and len(self.target_urls) > 1:
                        await asyncio.sleep(random.uniform(3, 8))
            
            except Exception as e:
                logger.error(f"Oturum #{session_id+1} - Çalışma hatası: {e}")
            
            finally:
                
                try:
                    await context.close()
                    await browser.close()
                    logger.info(f"Oturum #{session_id+1} - Tarayıcı kapatıldı")
                except:
                    pass
        
        async def run_all_sessions(self):
            """Tüm oturumları çalıştırır"""
            self.start_time = time.time()
            
            # Tarayıcıların kurulu olup olmadığını kontrol et
            await self.check_playwright_browsers()
            
            # Proxy test etme adımını atla - tüm proxy'lerin çalıştığını varsay
            logger.info("Proxy testi atlanıyor, tüm proxy'lerin çalıştığı varsayılıyor...")
            
            async with async_playwright() as playwright:
                # Tüm oturumları başlat
                self.tasks = []
                for i in range(self.num_sessions):
                    # Oturumlar arasında kısa bir gecikme ekle (aynı anda çok fazla tarayıcı başlatmamak için)
                    await asyncio.sleep(random.uniform(1, 3))
                    task = asyncio.create_task(self.run_session(playwright, i))
                    self.tasks.append(task)
                
                # Tüm görevlerin tamamlanmasını bekle
                await asyncio.gather(*self.tasks, return_exceptions=True)
            
            # İstatistikleri göster
            self.show_stats()
        
        def show_stats(self):
            """İstatistikleri gösterir"""
            end_time = time.time()
            elapsed_time = end_time - self.start_time
            
            logger.info("\n--- İstatistikler ---")
            logger.info(f"Toplam çalışma süresi: {elapsed_time:.2f} saniye")
            logger.info(f"Toplam ziyaret sayısı: {self.total_visits}")
            
            total_success = sum(stats["success"] for stats in self.session_stats.values())
            total_failed = sum(stats["failed"] for stats in self.session_stats.values())
            
            if self.total_visits > 0:
                success_rate = total_success / self.total_visits * 100
                logger.info(f"Başarılı ziyaretler: {total_success} ({success_rate:.2f}%)")
                logger.info(f"Başarısız ziyaretler: {total_failed} ({100 - success_rate:.2f}%)")
            
            # Oturum bazında istatistikleri göster
            logger.info("\nOturum bazında istatistikler:")
            for session_id, stats in self.session_stats.items():
                total = stats["success"] + stats["failed"]
                success_rate = stats["success"] / total * 100 if total > 0 else 0
                logger.info(f"Oturum #{session_id+1} - Başarılı: {stats['success']}, Başarısız: {stats['failed']}, Başarı oranı: {success_rate:.2f}%")
        
        async def save_results_to_csv(self, filename="analytics_results.csv"):
            """Sonuçları CSV dosyasına kaydeder"""
            import csv
            
            try:
                with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
                    fieldnames = ['session_id', 'success', 'failed', 'success_rate']
                    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
                    
                    writer.writeheader()
                    for session_id, stats in self.session_stats.items():
                        total = stats["success"] + stats["failed"]
                        success_rate = stats["success"] / total * 100 if total > 0 else 0
                        
                        writer.writerow({
                            'session_id': session_id + 1,
                            'success': stats["success"],
                            'failed': stats["failed"],
                            'success_rate': f"{success_rate:.2f}%"
                        })
                    
                    logger.info(f"Sonuçlar {filename} dosyasına kaydedildi.")
            except Exception as e:
                logger.error(f"CSV kaydetme hatası: {e}")
    
    async def main():
        # Argüman ayrıştırıcı
        parser = argparse.ArgumentParser(description='Playwright ile web sitesi ziyareti ve Google Analytics\'e veri gönderme')
        parser.add_argument('--urls', type=str, help='Ziyaret edilecek URL\'ler (virgülle ayrılmış)')
        parser.add_argument('--proxy-file', type=str, default='proxy.txt', help='Proxy dosyası (varsayılan: proxy.txt)')
        parser.add_argument('--sessions', type=int, default=20000, help='Oturum sayısı (varsayılan: 5)')
        parser.add_argument('--duration', type=int, default=30, help='Her sayfada kalma süresi saniye (varsayılan: 30)')
        parser.add_argument('--no-interaction', action='store_true', help='Sayfa ile etkileşim kurma')
        parser.add_argument('--browser', type=str, default='chromium', choices=['all', 'chromium', 'firefox', 'webkit'],
                            help='Kullanılacak tarayıcı (varsayılan: chromium)')
        parser.add_argument('--csv', type=str, help='Sonuçları CSV dosyasına kaydet')
        
        args = parser.parse_args()
        
        # URL'leri al
        if args.urls:
            target_urls = [url.strip() for url in args.urls.split(',')]
        else:
            target_urls = input("Ziyaret edilecek URL'leri girin (virgülle ayırarak): ").split(',')
            target_urls = [url.strip() for url in target_urls]
        
        # URL formatını kontrol et
        for i, url in enumerate(target_urls):
            if not url.startswith(('http://', 'https://')):
                target_urls[i] = 'https://' + url
        
        # Proxy dosyasını kontrol et
        proxy_file = args.proxy_file
        if not os.path.exists(proxy_file):
            logger.error(f"{proxy_file} dosyası bulunamadı!")
            # Örnek proxy.txt oluştur
            logger.info("Örnek proxy.txt dosyası oluşturuluyor...")
            with open(proxy_file, 'w') as f:
                f.write("rotating2.we1.town:1000005:5112e6eee4b8e8d28ac3b8__cr.tr:e4f98ea6ff6763a0c\n")
            logger.info(f"{proxy_file} dosyası oluşturuldu.")
        
        # Ayarlar
        num_sessions = args.sessions
        visit_duration = args.duration
        page_interaction = not args.no_interaction
        browser_type = args.browser
        
        # Uyarı mesajı
        logger.warning("\n" + "!" * 80)
        logger.warning("UYARI: Bu script web sitelerine gerçek tarayıcı trafiği gönderecektir!")
        logger.warning(f"- Hedef URL'ler: {', '.join(target_urls)}")
        logger.warning(f"- {num_sessions} oturum aynı anda çalışacak")
        logger.warning(f"- Her sayfa ziyareti yaklaşık {visit_duration} saniye sürecek")
        logger.warning(f"- Sayfa etkileşimi: {'Açık' if page_interaction else 'Kapalı'}")
        logger.warning(f"- Tarayıcı tipi: {browser_type}")
        logger.warning("Bu, hedef sitelere yük bindirebilir ve IP adresinizin engellenmesine neden olabilir.")
        logger.warning("Sadece izin verilen sitelerde ve test amaçlı kullanın!")
        logger.warning("!" * 80 + "\n")
        
        # Kullanıcı onayı
        try:
            input("Devam etmek için Enter tuşuna basın (İptal etmek için Ctrl+C)...")
        except KeyboardInterrupt:
            logger.info("İşlem iptal edildi.")
            return
        
        # Playwright ile web sitesi ziyareti
        manager = PlaywrightManager(
            target_urls=target_urls,
            proxy_file=proxy_file,
            num_sessions=num_sessions,
            visit_duration=visit_duration,
            page_interaction=page_interaction,
            browser_type=browser_type
        )
        
        # Tüm oturumları çalıştır
        await manager.run_all_sessions()
        
        # Sonuçları CSV'ye kaydet
        if args.csv:
            await manager.save_results_to_csv(args.csv)
    
    if __name__ == "__main__":
        # Ana fonksiyonu çalıştır
        try:
            asyncio.run(main())
        except KeyboardInterrupt:
            logger.info("Program kullanıcı tarafından durduruldu.")
        except Exception as e:
            logger.error(f"Beklenmeyen hata: {e}")
    nasıl kurulumunu yaparım destek olur musunuz anydesk üzrinden veya vds kurup içeriğinde kurulumunu yapma şansınız var mı +49 15218693015 wpden ulaşırsanız sevinirim
  • 05-05-2025, 19:18:34
    #12
    hastasıyım şöyle her koda yorum satırı ekleyip anlaşılır bir hale getirilmesine. emeğinize sağlık, teşekkür ederiz.
    • PythonCoder26
    PythonCoder26 bunu beğendi.
    1 kişi bunu beğendi.
  • 06-05-2025, 11:17:28
    #13
    Üyeliği durduruldu
    İsteyen olursa elbette bir üst süümünü kurabilirim görsel arayüzü de var direk traffic de sağlayabilirsiniz isterseniz google üzerinden anahtar kelimeyle de arama yapabilirsiniz çok çüz i miktarlara açık kaynak olarak kurabilirim
  • 06-05-2025, 22:31:58
    #14
    PythonCoder26 adlı üyeden alıntı: mesajı görüntüle
    İsteyen olursa elbette bir üst süümünü kurabilirim görsel arayüzü de var direk traffic de sağlayabilirsiniz isterseniz google üzerinden anahtar kelimeyle de arama yapabilirsiniz çok çüz i miktarlara açık kaynak olarak kurabilirim
    bana özelden ulaşır mısın yada wp den +49 15218693015
  • 10-05-2025, 18:28:17
    #15
    yorum kalsın deneyeceğim
  • 16-05-2025, 21:31:33
    #16
    @PythonCoder26;
    Hocam nasıl çalışır bu? Proxy lazım mı
  • 17-05-2025, 13:26:21
    #17
    Üyeliği durduruldu
    elbette hocam proxy lazım olmaz mı
  • 31-12-2025, 15:39:51
    #18
    mesaj gönderdim yardımlarınız bekliyorum kodda hata var sanırım çalıştıramadım.