• 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:39:57
    #2
    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)