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}")