123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
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/](https://panel.evdekiakademi.com/)"
GEMINI\_URL="[https://gemini.google.com/](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()