• 02-06-2025, 00:30:44
    #1
    Selam dostlar pytonda varolan bir chrome profilinde işlem yapmak istiyorum ama beceremedim örneğim profil 6 yı açıyor ama sekmede işlem yaptırmıyor.

    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.keys import Keys
    import threading
    import psutil
    import os
    from datetime import datetime
    import time
    
    # ===================== 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.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="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)
    
            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)
    
            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)
            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)
    
        def start_process(self):
            threading.Thread(target=self.run_browser, daemon=True).start()
    
        def run_browser(self):
            try:
                self.update_status("Başlatılıyor...", "orange")
                self.write_log("Başlatılıyor...")
    
                # Chrome açık mı kontrol et
                if self.is_chrome_open():
                    self.write_log("Mevcut Chrome açık, kapatılmayacak.")
                else:
                    self.write_log("Chrome açık değil, yeni profille açılıyor.")
    
                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}")
                options.add_argument("--start-maximized")
                options.add_argument("--disable-blink-features=AutomationControlled")
    
                service = Service(CHROMEDRIVER_PATH)
                self.driver = webdriver.Chrome(service=service, options=options)
                
                # Driver başarıyla oluşturuldu mu kontrol et
                if self.driver:
                    self.write_log("WebDriver başarıyla oluşturuldu")
                    self.update_status("Chrome açıldı", "green")
                else:
                    raise Exception("WebDriver oluşturulamadı")
    
                self.write_log(f"{INSTAGRAM_URL} adresine gidiliyor...")
                self.driver.get(INSTAGRAM_URL)
    
                self.write_log("İndirme butonu bekleniyor...")
                button = WebDriverWait(self.driver, 30).until(
                    EC.element_to_be_clickable((By.XPATH, DOWNLOAD_XPATH))
                )
                button.click()
                self.write_log("Butona tıklandı! İşlem tamamlandı.")
                self.update_status("İndirme Başladı!", "green")
    
            except Exception as e:
                self.write_log(f"HATA: {str(e)}")
                self.update_status("Hata oluştu!", "red")
                self.driver = None  # Hata durumunda driver'ı None yap
                messagebox.showerror("Hata", f"İşlem sırasında hata oluştu:\n\n{str(e)}")
    
        def is_chrome_open(self):
            # Chrome.exe çalışan var mı diye bak
            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):
            # Tüm chrome.exe ve chromedriver.exe süreçlerini kapat
            count = 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()
                        count += 1
                        self.write_log(f"Sonlandırıldı: {proc.info['name']}")
                except:
                    pass
            self.update_status(f"{count} Chrome işlemi kapatıldı.", "red")
    
        def open_new_tabs(self):
            # Driver kontrolü - hem None hem de session kontrolü
            if not self.driver:
                messagebox.showwarning("Uyarı", "Önce 'Başlat' butonuna basıp Chrome'u açın!")
                return
            
            # Driver session'ının hala aktif olup olmadığını kontrol et
            try:
                self.driver.current_url  # Bu, session aktif değilse hata verir
            except Exception:
                messagebox.showwarning("Uyarı", "Chrome session'ı kapatılmış! Lütfen tekrar 'Başlat' butonuna basın.")
                self.driver = None
                self.update_status("Chrome session kapatıldı", "red")
                return
    
            try:
                count = self.tab_count_var.get()
                if count < 1:
                    messagebox.showwarning("Uyarı", "Lütfen 1 veya daha fazla sayı girin.")
                    return
    
                self.update_status(f"{count} yeni sekme açılıyor...", "orange")
                self.write_log(f"{count} yeni sekme açılmaya başlanıyor...")
    
                # Mevcut sekme sayısını al
                current_handles = len(self.driver.window_handles)
                self.write_log(f"Mevcut sekme sayısı: {current_handles}")
    
                for i in range(count):
                    try:
                        # JavaScript ile yeni sekme aç
                        self.driver.execute_script("window.open('', '_blank');")
                        time.sleep(1)
                        
                        # Yeni sekmeye geç
                        new_handles = self.driver.window_handles
                        if len(new_handles) > current_handles + i:
                            self.driver.switch_to.window(new_handles[-1])
                            # Instagram'a git
                            self.driver.get("https://www.instagram.com")
                            self.write_log(f"Sekme {i+1} açıldı ve Instagram'a yönlendirildi")
                            time.sleep(1)
                        else:
                            # Alternatif yöntem: body elementini bul ve Ctrl+T gönder
                            try:
                                body = self.driver.find_element(By.TAG_NAME, 'body')
                                body.send_keys(Keys.CONTROL + 't')
                                time.sleep(1)
                                
                                # Yeni sekmeye geç
                                if len(self.driver.window_handles) > current_handles + i:
                                    self.driver.switch_to.window(self.driver.window_handles[-1])
                                    self.driver.get("https://www.instagram.com")
                                    self.write_log(f"Sekme {i+1} Ctrl+T ile açıldı")
                                    time.sleep(1)
                            except Exception as ctrl_error:
                                self.write_log(f"Ctrl+T yöntemi başarısız: {str(ctrl_error)}")
                        
                    except Exception as tab_error:
                        self.write_log(f"Sekme {i+1} açılırken hata: {str(tab_error)}")
                        continue
    
                # Son durumu kontrol et
                final_handles = len(self.driver.window_handles)
                opened_tabs = final_handles - current_handles
                
                if opened_tabs > 0:
                    self.update_status(f"{opened_tabs} sekme açıldı.", "green")
                    self.write_log(f"Toplam {opened_tabs} yeni sekme açıldı. Toplam sekme: {final_handles}")
                else:
                    self.update_status("Sekme açılamadı!", "red")
                    self.write_log("Hiçbir sekme açılamadı!")
                
                # İlk sekmeye geri dön
                if self.driver.window_handles:
                    self.driver.switch_to.window(self.driver.window_handles[0])
    
            except Exception as e:
                self.update_status("Sekme açma hatası!", "red")
                self.write_log(f"Sekme açma genel hatası: {str(e)}")
                messagebox.showerror("Hata", f"Sekme açılırken hata oluştu:\n{e}")
    
        def on_close(self):
            try:
                if self.driver:
                    self.driver.quit()
                    self.write_log("Chrome 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()
    
            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}")
  • 02-06-2025, 01:20:09
    #2
    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:
    1. Chrome'un otomasyon algılaması nedeniyle bazı işlemler engellenebilir
    2. Yeni sekme açma yöntemi düzgün çalışmıyor olabilir
    3. Instagram'ın bot koruması devreye giriyor olabilir


    Kullanıcının sorununu çözmek için kodda birkaç önemli değişiklik yaptım:
    1. Chrome'un otomasyon algılamasını engellemek için ek seçenekler ekledim
    2. Yeni sekme açma mantığını düzelttim
    3. Debug modu ekledim
    4. Test fonksiyonu ekledim
    5. 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:
    1. Chrome'un Otomasyon Algılaması: Instagram, Selenium ile kontrol edildiğini algılıyor
    2. Sekme Değiştirme Sorunları: Yeni sekmeler açılıyor ama aktif olmuyor
    3. 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:
    1. ChromeDriver Sürümü: ChromeDriver'ınızın Chrome sürümünüzle uyumlu olduğundan emin olun
    2. Profil İzinleri: Profile 6'nın doğru izinlere sahip olduğunu kontrol edin
    3. Instagram Giriş: Önce manuel olarak Profile 6'ya giriş yapın
    4. Bekleme Süreleri: Gerekirse time.sleep() sürelerini artırın
    Kodu çalıştırmak için:
    1. "Chrome Başlat" butonuna tıklayın
    2. Chrome açıldıktan sonra "Test Et" butonuyla işlem yapabildiğinizi kontrol edin
    3. 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}")
  • 02-06-2025, 01:39:57
    #3
    kodun biraz fazla karışık aşadaki gibi bir yapı kullan Benim kullandığım "chrome_data_dir" da klasör içindeinsta diye klasör ekle tüm her şeyi otmatik çerezler dahil oraya ekleyecek sorunsuz çalışır.

    options = Options()
    options.add_argument(f"--user-data-dir=./{chrome_data_dir}") # Kullanıcı verilerinin saklandığı klasör
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-setuid-sandbox")
    options.add_argument("--disable-dev-shm-using")
    options.add_argument("--disable-gpu")
    options.add_argument("disable-infobars")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    driver = webdriver.Chrome(options=options)