import os import time import random import json from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.service import Service # ----------- AYARLAR & XPATH'LER ----------- EXAM_START_URL = "https://panel.evdekiakademi.com/" GEMINI_URL = "https://gemini.google.com/" SCREENSHOT_PATH = "question.png" XPATH_PLUS_BTN = '/html/body/chat-app/main/side-navigation-v2/bard-sidenav-container/bard-sidenav-content/div[2]/div/div[2]/chat-window/div/input-container/div/input-area-v2/div/div/div[2]/div/uploader/div/div/button/mat-icon' XPATH_UPLOAD_BTN = '/html/body/div[7]/div/div/mat-card/mat-action-list/images-files-uploader/button[1]' XPATH_FILE_INPUT = "//input[@type='file']" XPATH_PROMPT_BOX = '/html/body/chat-app/main/side-navigation-v2/bard-sidenav-container/bard-sidenav-content/div[2]/div/div[2]/chat-window/div/input-container/div/input-area-v2/div/div/div[1]/div/div/rich-textarea/div[1]/p' XPATH_SEND_BTN = '/html/body/chat-app/main/side-navigation-v2/bard-sidenav-container/bard-sidenav-content/div[2]/div/div[2]/chat-window/div/input-container/div/input-area-v2/div/div/div[3]/div/div[2]/button' XPATH_GEMINI_ANSWER = '//div[contains(@class,"response-content")]//pre' PROMPT_TEXT = ''' Bu görselde çoktan seçmeli bir soru var. Cevabı sadece şu formatta JSON olarak ver: { "cevap": "D" } Eğer cevaptan emin değilsen yine de bir şık seç. Lütfen sadece bu JSON formatını kullan, başka hiçbir şey yazma. ''' def wait_xpath(driver, xpath, timeout=20): return WebDriverWait(driver, timeout).until( EC.presence_of_element_located((By.XPATH, xpath)) ) def wait_clickable(driver, xpath, timeout=20): return WebDriverWait(driver, timeout).until( EC.element_to_be_clickable((By.XPATH, xpath)) ) def random_delay(a=1, b=3): time.sleep(random.uniform(a, b)) def main(): chrome_options = Options() chrome_options.add_argument("--start-maximized") chrome_options.add_argument(r"--user-data-dir=C:\Users\sbatu\AppData\Local\Google\Chrome\User Data") chrome_options.add_argument(r'--profile-directory=Profile 2') driver_path = os.path.join(os.getcwd(), "chromedriver.exe") service = Service(driver_path) driver = webdriver.Chrome(service=service, options=chrome_options) try: print("[*] Başlangıç sayfası açılıyor. Sınavı manuel aç, soruyu tam görünür yap.") driver.get(EXAM_START_URL) while True: input("[*] Soruyu tam olarak görünür yaptıysan ve ekran görüntüsü alınmasını istiyorsan ENTER'a bas...") print("[*] Ekran görüntüsü alınıyor...") driver.save_screenshot(SCREENSHOT_PATH) print(f"[*] '{SCREENSHOT_PATH}' olarak kaydedildi.") print("[*] Yeni sekmede Gemini açılıyor...") driver.execute_script("window.open('');") driver.switch_to.window(driver.window_handles[-1]) driver.get(GEMINI_URL) random_delay(5, 8) print("[*] Artı (+) tuşuna basılıyor...") plus_btn = wait_clickable(driver, XPATH_PLUS_BTN) plus_btn.click() random_delay(1, 2) print("[*] Dosya yükle butonuna basılıyor...") upload_btn = wait_clickable(driver, XPATH_UPLOAD_BTN) upload_btn.click() random_delay(1, 2) print("[*] Dosya inputuna ekran görüntüsü gönderiliyor...") file_input = wait_xpath(driver, XPATH_FILE_INPUT) abs_path = os.path.abspath(SCREENSHOT_PATH) file_input.send_keys(abs_path) random_delay(6, 10) print("[*] JSON promptu yapıştırılıyor...") prompt_box = wait_xpath(driver, XPATH_PROMPT_BOX) prompt_box.click() prompt_box.send_keys(PROMPT_TEXT) random_delay(1, 2) send_btn = wait_clickable(driver, XPATH_SEND_BTN) send_btn.click() print("[*] Prompt gönderildi, Gemini cevabı bekleniyor...") answer_elem = WebDriverWait(driver, 40).until( EC.presence_of_element_located((By.XPATH, XPATH_GEMINI_ANSWER)) ) answer_text = answer_elem.text.strip() print(f"[*] Gemini cevabı:\n{answer_text}") try: answer_json = json.loads(answer_text) secilen_sik = answer_json.get("cevap", "").upper() if secilen_sik not in ["A", "B", "C", "D"]: raise ValueError("Geçersiz şık") except Exception: print("[!] JSON parse hatası veya geçersiz cevap, rastgele şık seçiliyor.") secilen_sik = random.choice(["A", "B", "C", "D"]) print(f"[*] Seçilen şık: {secilen_sik}") print("[*] Ana sınav sekmesine dönülüyor...") driver.switch_to.window(driver.window_handles[0]) random_delay(1, 2) print("[*] Şıkları arıyor, seçim senin onayına bırakıldı...") options = driver.find_elements(By.CLASS_NAME, "secenek") matched = False for opt in options: text = opt.text.strip() if text.startswith(secilen_sik): opt.click() matched = True print(f"[*] '{secilen_sik}' şıkkı seçildi. Onaylamak için kendin tıkla.") break if not matched: print("[!] Şık bulunamadı, manuel seçmen gerekecek.") print("[*] Yeni soruyu açıp aynı şekilde devam edebilirsin.") except KeyboardInterrupt: print("[*] Bot kapatıldı.") except Exception as e: print("[!] Hata:", e) finally: driver.quit() if __name__ == "__main__": main()