kodda session yönetimi eksik hocam, kodun başında eski sevgilimin adını görünce canlı çalıştırmaya üşendim

direkt attım claude'a cevabını veriyorum. şaka bir yana ne yapmak istediğinizi detaylandırırsanız yardımcı olayım.
Muhtemel sorunlar ve çözümler:
- Chrome'un otomasyon algılaması nedeniyle bazı işlemler engellenebilir
- Yeni sekme açma yöntemi düzgün çalışmıyor olabilir
- Instagram'ın bot koruması devreye giriyor olabilir
Kullanıcının sorununu çözmek için kodda birkaç önemli değişiklik yaptım:
- Chrome'un otomasyon algılamasını engellemek için ek seçenekler ekledim
- Yeni sekme açma mantığını düzelttim
- Debug modu ekledim
- Test fonksiyonu ekledim
- Hata kontrollerini iyileştirdim
Ana sorunlar ve çözümleri:
- Chrome'un bot koruması nedeniyle işlem yapılamaması -> Anti-detection ayarları eklendi
- Yeni sekmelerde işlem yapılamaması -> Sekme değiştirme ve bekleme süreleri düzeltildi
- Session yönetimi sorunları -> Daha iyi kontroller eklendi
Ana Sorunlar:
- Chrome'un Otomasyon Algılaması: Instagram, Selenium ile kontrol edildiğini algılıyor
- Sekme Değiştirme Sorunları: Yeni sekmeler açılıyor ama aktif olmuyor
- Bekleme Süreleri: Sayfalar tam yüklenmeden işlem yapılmaya çalışılıyor
Önemli Değişiklikler:
1. Anti-Detection Ayarları:
python
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")2. JavaScript ile navigator.webdriver'ı kaldırma:
python
self.driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")3. Yeni Sekme Açma Düzeltmesi:
python
# JavaScript ile açma
self.driver.execute_script("window.open('about:blank', '_blank');")
time.sleep(1)
# Yeni sekmeye geçiş
new_tab = new_handles[-1]
self.driver.switch_to.window(new_tab)
# Instagram'a gitme
self.driver.get("https://www.instagram.com")4. Test Fonksiyonu:
Yeni bir "Test Et" butonu ekledim. Bu, aktif sekmede işlem yapabildiğinizi kontrol etmenizi sağlar.
Öneriler:
- ChromeDriver Sürümü: ChromeDriver'ınızın Chrome sürümünüzle uyumlu olduğundan emin olun
- Profil İzinleri: Profile 6'nın doğru izinlere sahip olduğunu kontrol edin
- Instagram Giriş: Önce manuel olarak Profile 6'ya giriş yapın
- Bekleme Süreleri: Gerekirse time.sleep() sürelerini artırın
Kodu çalıştırmak için:
- "Chrome Başlat" butonuna tıklayın
- Chrome açıldıktan sonra "Test Et" butonuyla işlem yapabildiğinizi kontrol edin
- Ardından "Yeni Sekmeler Aç" butonunu kullanın
Debug modu açıkken tüm işlemler detaylı loglanacak, böylece sorunun tam olarak nerede olduğunu görebilirsiniz.
import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
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
from selenium.webdriver.common.action_chains import ActionChains
import threading
import psutil
import os
from datetime import datetime
import time
import subprocess
# ===================== AYARLAR =====================
CHROME_PATH = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
USER_DATA_DIR = r"C:\Users\İlayda\AppData\Local\Google\Chrome\User Data"
PROFILE_NAME = "Profile 6"
CHROMEDRIVER_PATH = r"C:\CD\chromedriver.exe"
INSTAGRAM_URL = "https://www.instagram.com/"
DOWNLOAD_XPATH = "/html/body/div[6]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[1]/span[4]/div/div[1]"
LOG_FILE = os.path.join(os.getcwd(), "instagram_log.txt")
# ===================================================
class InstagramDownloader:
def __init__(self, root):
self.root = root
self.driver = None
self.log_file = None
self.debug_mode = True # Debug modu ekledik
self.setup_ui()
self.setup_log()
def setup_ui(self):
self.root.title("Instagram Downloader")
self.root.geometry("800x600")
main_frame = ttk.Frame(self.root)
main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
control_frame = ttk.Frame(main_frame)
control_frame.pack(fill=tk.X)
ttk.Button(control_frame, text="Chrome Başlat", command=self.start_process).pack(side=tk.LEFT)
ttk.Button(control_frame, text="Chrome Tümünü Kapat", command=self.close_all_chrome).pack(side=tk.LEFT, padx=10)
# Debug modu checkbox
self.debug_var = tk.BooleanVar(value=True)
ttk.Checkbutton(control_frame, text="Debug Modu", variable=self.debug_var).pack(side=tk.LEFT, padx=10)
ttk.Label(control_frame, text="Yeni Sekme Sayısı:").pack(side=tk.LEFT, padx=10)
self.tab_count_var = tk.IntVar(value=1)
ttk.Entry(control_frame, width=5, textvariable=self.tab_count_var).pack(side=tk.LEFT)
ttk.Button(control_frame, text="Yeni Sekmeler Aç", command=self.open_new_tabs).pack(side=tk.LEFT, padx=10)
ttk.Button(control_frame, text="Test Et", command=self.test_instagram).pack(side=tk.LEFT, padx=10)
self.status_label = ttk.Label(control_frame, text="Hazır", foreground="blue")
self.status_label.pack(side=tk.LEFT, padx=10)
self.log_text = scrolledtext.ScrolledText(main_frame, wrap=tk.WORD)
self.log_text.pack(fill=tk.BOTH, expand=True)
ttk.Label(main_frame, text=f"Log dosyası: {LOG_FILE}", foreground="green").pack()
self.root.protocol("WM_DELETE_WINDOW", self.on_close)
def setup_log(self):
try:
self.log_file = open(LOG_FILE, "a", encoding="utf-8")
self.write_log(f"\n\n===== Oturum Başladı ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) =====")
except Exception as e:
messagebox.showerror("Log Hatası", str(e))
def write_log(self, msg):
timestamp = datetime.now().strftime("[%H:%M:%S]")
full_msg = f"{timestamp} {msg}"
try:
self.log_text.insert(tk.END, full_msg + "\n")
self.log_text.see(tk.END)
self.root.update() # GUI'yi güncelle
except:
pass
if self.log_file:
try:
self.log_file.write(full_msg + "\n")
self.log_file.flush()
except:
pass
def update_status(self, msg, color="blue"):
self.status_label.config(text=msg, foreground=color)
self.root.update()
def kill_chrome_processes(self):
"""Chrome ve chromedriver süreçlerini temizle"""
killed = 0
for proc in psutil.process_iter(['name']):
try:
if proc.info['name'] and proc.info['name'].lower() in ('chrome.exe', 'chromedriver.exe'):
proc.kill()
killed += 1
except:
pass
return killed
def start_process(self):
threading.Thread(target=self.run_browser, daemon=True).start()
def run_browser(self):
try:
self.update_status("Chrome başlatılıyor...", "orange")
self.write_log("Chrome başlatılıyor...")
# Önce var olan Chrome'ları kapat (opsiyonel)
if self.debug_var.get():
killed = self.kill_chrome_processes()
if killed > 0:
self.write_log(f"{killed} Chrome süreci kapatıldı")
time.sleep(2) # Süreçlerin kapanması için bekle
options = Options()
options.binary_location = CHROME_PATH
options.add_argument(f"user-data-dir={USER_DATA_DIR}")
options.add_argument(f"--profile-directory={PROFILE_NAME}")
# Otomasyon algılamayı engelle
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
# Ek güvenlik ayarları
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")
options.add_argument("--start-maximized")
# User-Agent ayarla
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
service = Service(CHROMEDRIVER_PATH)
self.write_log("WebDriver oluşturuluyor...")
self.driver = webdriver.Chrome(service=service, options=options)
# JavaScript ile navigator.webdriver'ı kaldır
self.driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
self.write_log("Chrome başarıyla açıldı!")
self.update_status("Chrome açıldı", "green")
# Instagram'a git
self.write_log(f"Instagram'a gidiliyor...")
self.driver.get(INSTAGRAM_URL)
# Sayfa yüklenmesini bekle
time.sleep(5)
self.write_log("Instagram sayfası yüklendi")
self.update_status("Instagram açıldı", "green")
except Exception as e:
self.write_log(f"HATA: {str(e)}")
self.update_status("Hata oluştu!", "red")
self.driver = None
messagebox.showerror("Hata", f"Chrome başlatılırken hata oluştu:\n\n{str(e)}")
def test_instagram(self):
"""Instagram'da test işlemi yap"""
if not self.driver:
messagebox.showwarning("Uyarı", "Önce Chrome'u başlatın!")
return
try:
self.update_status("Test ediliyor...", "orange")
# Aktif sekmeyi kontrol et
current_url = self.driver.current_url
self.write_log(f"Aktif URL: {current_url}")
# Instagram'da değilse git
if "instagram.com" not in current_url:
self.driver.get("https://www.instagram.com")
time.sleep(3)
# Sayfada bir element bul ve tıkla (örnek)
try:
# Arama kutusunu bul
search_box = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Search']"))
)
self.write_log("Arama kutusu bulundu!")
# Arama kutusuna tıkla
search_box.click()
time.sleep(1)
# Test metni yaz
search_box.send_keys("test")
self.write_log("Test metni yazıldı")
self.update_status("Test başarılı!", "green")
except Exception as e:
self.write_log(f"Element bulunamadı: {str(e)}")
# Alternatif: Sayfada herhangi bir tıklanabilir element bul
try:
clickable = self.driver.find_element(By.TAG_NAME, "body")
clickable.click()
self.write_log("Body elementine tıklandı")
except:
pass
except Exception as e:
self.write_log(f"Test hatası: {str(e)}")
self.update_status("Test başarısız!", "red")
def open_new_tabs(self):
"""Yeni sekmeler aç ve Instagram'a git"""
if not self.driver:
messagebox.showwarning("Uyarı", "Önce Chrome'u başlatın!")
return
try:
# Session kontrolü
self.driver.current_url
except Exception:
messagebox.showwarning("Uyarı", "Chrome bağlantısı kopmuş! Tekrar başlatın.")
self.driver = None
return
try:
count = self.tab_count_var.get()
if count < 1:
messagebox.showwarning("Uyarı", "En az 1 sekme açmalısınız.")
return
self.update_status(f"{count} sekme açılıyor...", "orange")
self.write_log(f"{count} yeni sekme açılıyor...")
# Mevcut sekmeleri kaydet
original_handles = self.driver.window_handles
original_count = len(original_handles)
# Ana sekmeye odaklan
self.driver.switch_to.window(original_handles[0])
successfully_opened = 0
for i in range(count):
try:
# Yöntem 1: JavaScript ile yeni sekme aç
self.driver.execute_script("window.open('about:blank', '_blank');")
time.sleep(1)
# Yeni sekmeleri kontrol et
new_handles = self.driver.window_handles
if len(new_handles) > original_count + successfully_opened:
# En son açılan sekmeye geç
new_tab = new_handles[-1]
self.driver.switch_to.window(new_tab)
# Instagram'a git
self.driver.get("https://www.instagram.com")
self.write_log(f"Sekme {i+1} açıldı ve Instagram yüklendi")
# Sayfanın yüklenmesini bekle
time.sleep(2)
# Sayfa başlığını kontrol et
title = self.driver.title
self.write_log(f"Sekme {i+1} başlığı: {title}")
successfully_opened += 1
else:
self.write_log(f"Sekme {i+1} açılamadı")
except Exception as e:
self.write_log(f"Sekme {i+1} hatası: {str(e)}")
# İlk sekmeye geri dön
self.driver.switch_to.window(original_handles[0])
# Sonuçları bildir
self.write_log(f"Toplam {successfully_opened}/{count} sekme başarıyla açıldı")
self.update_status(f"{successfully_opened} sekme açıldı", "green" if successfully_opened > 0 else "red")
# Tüm sekmeleri listele
if self.debug_var.get():
self.write_log("Açık sekmeler:")
for idx, handle in enumerate(self.driver.window_handles):
self.driver.switch_to.window(handle)
self.write_log(f" Sekme {idx+1}: {self.driver.title} - {self.driver.current_url}")
# Ana sekmeye dön
self.driver.switch_to.window(original_handles[0])
except Exception as e:
self.write_log(f"Genel hata: {str(e)}")
self.update_status("Sekme açma hatası!", "red")
messagebox.showerror("Hata", f"Sekme açılırken hata oluştu:\n{e}")
def is_chrome_open(self):
for proc in psutil.process_iter(['name']):
if proc.info['name'] and proc.info['name'].lower() == 'chrome.exe':
return True
return False
def close_all_chrome(self):
count = self.kill_chrome_processes()
self.update_status(f"{count} Chrome işlemi kapatıldı.", "red")
self.write_log(f"{count} Chrome işlemi kapatıldı")
self.driver = None
def on_close(self):
try:
if self.driver:
self.driver.quit()
self.write_log("WebDriver kapatıldı.")
except:
pass
try:
if self.log_file:
self.write_log("Uygulama kapatıldı.")
self.log_file.close()
except:
pass
self.root.destroy()
# Ana uygulama başlatıcı
if __name__ == "__main__":
try:
root = tk.Tk()
# Pencereyi ortala
w, h = 800, 600
sw, sh = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry(f"{w}x{h}+{(sw - w) // 2}+{(sh - h) // 2}")
app = InstagramDownloader(root)
root.mainloop()
except Exception as e:
print(f"Uygulama başlatılırken hata oluştu: {e}")
messagebox.showerror("Kritik Hata", f"Uygulama başlatılamadı:\n{e}")