• 22-06-2025, 10:09:26
    #1
    EBA'da lise için hazırlanan soru bankaları testlerini indirecektim. Baktım sayısı çok fazla bot yazayım dedim ama ne yaptıysam bot işe yaramıyor. En a 10 farklı yaklaşım denedim ama EBA izin vermiyor botun kullanımına. Aşağıda kodu bıraktım. pitonla yazdım, tısladı fısladı ama EBA bana mısın demiyor.

    import os
    import time
    import random
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import pyautogui
    
    # 1. TARAYICI AYARLARI
    def setup_driver():
        chrome_options = Options()
        chrome_options.add_argument("--start-maximized")
        chrome_options.add_argument("--disable-blink-features=AutomationControlled")
        chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
        chrome_options.add_experimental_option("useAutomationExtension", False)
        
        # Kullanıcı ajanını değiştir (insan gibi görünmesi için)
        chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
        
        # İndirme klasörü ayarları
        download_folder = os.path.join(os.getcwd(), "EBA_Indirilenler")
        os.makedirs(download_folder, exist_ok=True)
        
        prefs = {
            "download.default_directory": download_folder,
            "download.prompt_for_download": False,
            "download.directory_upgrade": True,
            "safebrowsing.enabled": False
        }
        chrome_options.add_experimental_option("prefs", prefs)
        
        # WebDriverManager ile otomatik chromedriver kurulumu
        try:
            from webdriver_manager.chrome import ChromeDriverManager
            service = Service(ChromeDriverManager().install())
        except:
            service = Service('chromedriver.exe')
        
        driver = webdriver.Chrome(service=service, options=chrome_options)
        
        # Bot tespitini önleme
        driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
            "source": """
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            })
            """
        })
        
        return driver, download_folder
    
    # 2. İNDİRME İŞLEMLERİ
    def download_tests():
        try:
            driver, download_folder = setup_driver()
            base_url = "https://ogmmateryal.eba.gov.tr/soru-bankasi-soru-tipi-sec/biyoloji?s=7&d=6&k=on,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487"
            
            print("\nEBA Soru Bankası İndirici Başlatılıyor...")
            print(f"İndirilenler klasörü: {download_folder}")
            
            # Test tipleri
            test_types = {
                "css": "Çoktan Seçmeli",
                "bbs": "Beceri Temelli",
                "aus": "Açık Uçlu"
            }
            
            for test_type, test_name in test_types.items():
                print(f"\n>>> {test_name} Testleri İşleniyor...")
                
                try:
                    # Sayfayı aç
                    driver.get(f"{base_url}&t={test_type}")
                    time.sleep(random.uniform(3, 5))  # Rastgele bekleme
                    
                    # Sayfayı biraz kaydır (insan taklidi)
                    driver.execute_script("window.scrollBy(0, 300)")
                    time.sleep(1)
                    
                    # Test linklerini bul
                    test_links = WebDriverWait(driver, 20).until(
                        EC.presence_of_all_elements_located((By.XPATH, "//a[contains(@class, 'list-group-item')]")))
                    print(f"Bulunan test sayısı: {len(test_links)}")
                    
                    for i, link in enumerate(test_links[:2], 1):  # Sadece ilk 2 test
                        try:
                            print(f"\n{i}. Test: {link.text.strip()}")
                            
                            # Linke tıkla (JavaScript ile)
                            driver.execute_script("arguments[0].click();", link)
                            time.sleep(random.uniform(2, 4))
                            
                            # İndirme butonunu bul
                            download_btn = WebDriverWait(driver, 20).until(
                                EC.element_to_be_clickable((By.XPATH, "//a[contains(@title, 'İndir') and contains(@class, 'btn-success')]")))
                            
                            # İndirme butonuna tıkla
                            driver.execute_script("arguments[0].click();", download_btn)
                            print("İndirme başlatıldı...")
                            
                            # İndirme için bekle
                            time.sleep(random.uniform(5, 8))
                            
                            # Geri dön
                            driver.back()
                            time.sleep(random.uniform(2, 3))
                            
                        except Exception as e:
                            print(f"Test indirme hatası: {str(e)}")
                            driver.back()
                            continue
                            
                except Exception as e:
                    print(f"Test listesi alınamadı: {str(e)}")
                    continue
                    
        except Exception as e:
            print(f"Beklenmeyen hata: {str(e)}")
        finally:
            if 'driver' in locals():
                driver.quit()
            input("\nİşlem tamamlandı. Çıkmak için ENTER tuşuna basın...")
    
    if __name__ == "__main__":
        pyautogui.PAUSE = 1
        download_tests()
    burada 10-11-12.sınıfların tüm derslere ait testleri almam gerekiyor. 100den fazla ders ve her derse ait 50-60 test. elle yapınca canım çıkıyor. 61 testi elle indirmek 1 saatimi aldı. YZ desteği de aldım ama sadece bir tanesi bir dosya indirebildi başka indiremedi. gemini, chatgpt, qwen, deepseek... beceremedi hiçbiri. var mı yardımcı olacak
    kodu geliştirmek için yardım istiyorum iş ilanı değildir
  • 22-06-2025, 10:28:55
    #2
    bakıyorum hocam
  • 22-06-2025, 10:42:38
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Bunu böyle değil de sayfa sayfa aktararak yaparsan olumlu sonuç alırsın senin şu an yaptığın alt alta ve muhtemel bu da istediğini oluşturmadığı için derleme sonucunda error veriyor. Yani yapman gereken aslında index numaralarına göre şekillendirmen istersen özelden PM gönderdim sana ücretsiz yardımcı olabilirim.
  • 22-06-2025, 11:24:40
    #4
    onuraltanuyar adlı üyeden alıntı: mesajı görüntüle
    Bunu böyle değil de sayfa sayfa aktararak yaparsan olumlu sonuç alırsın senin şu an yaptığın alt alta ve muhtemel bu da istediğini oluşturmadığı için derleme sonucunda error veriyor. Yani yapman gereken aslında index numaralarına göre şekillendirmen istersen özelden PM gönderdim sana ücretsiz yardımcı olabilirim.
    deniyorum, teşekkürler