Selenium'un Tkinter Butonu İle Çalıştırılırken Takılması (Python)
-
Merhaba arkadaşlar, tkinter bir arayüz üzerindeki butona selenium fonksiyonu tanımladım. Sorunum şu;
Butona basıldığı zaman 2 saniye takılma oluyor ve browser açılıyor ancak selenium işlemleri bitmeden arayüze tekrar tıklandığı zaman windows hata veriyor ve arayüz donuyor.
Örneğin selenium işlemlerini fonksiyon yerine, exe haline çevirip çalıştırdığımda takılma olmuyor ama bu pek pratik bir çözüm değil. Nasıl yapılabilir?
SENAR1ST tarafından 26/Eyl/19 14:35 tarihinde düzenlenmiştir -
Takılma kısmı dediğiniz gecikme sanırım. Bunun için kodların ilgili bolümlerini paylaşırsanız daha rahat yorum yapılabilir.
Tekrar butona basılınca hata vermesine gelince. Butona bir defa basıldıktan sonra işlem bitene kadar butonu pasif hale getirmeniz bir çozüm olabilir.
-
coder2 bunu yazdı
Takılma kısmı dediğiniz gecikme sanırım. Bunun için kodların ilgili bolümlerini paylaşırsanız daha rahat yorum yapılabilir.
Tekrar butona basılınca hata vermesine gelince. Butona bir defa basıldıktan sonra işlem bitene kadar butonu pasif hale getirmeniz bir çozüm olabilir.
Kodları aşağıda verdim hocam. Sorunları tekrar hatırlatıyım. Butona tıklandığında selenium işlemlere başlıyor. Ama arayüz, işlemler bitene kadar kilitleniyor. Bir diğer sorunum ise arayüzü kapattığımda selenium browser de kapanıyor. Arayüz ve selenium işlemlerini nasıl birbirinden bağımsız yapabilirim?
import tkinter as tk
from selenium import webdriver
import time
def selenium ():
driver = webdriver.Chrome(executable_path='C:\chromedriver.exe')
driver.get("https://www.tahribat.com/")
time.sleep(0.5)
driver.get("https://www.tahribat.com/forum/seleniumun-tkinter-butonu-ile-calistirilirken-tak-242907")
time.sleep(0.5)
driver.get("https://www.tahribat.com/")
time.sleep(0.5)
driver.get("https://www.tahribat.com/")
time.sleep(0.5)
driver.get("https://www.tahribat.com/forum/seleniumun-tkinter-butonu-ile-calistirilirken-tak-242907")
time.sleep(0.5)
driver.get("https://www.tahribat.com/")
time.sleep(0.5)
tkinter = tk.Tk()
tkinter.geometry('500x300+990+300')
buton1 = tk.Button(tkinter, text="Buton Buton Buton Buton",command=selenium).place(relx=.2, rely=.2)
tkinter.mainloop() -
Threadlere bak hocam. Butona bastiginda o islemi ayri bir threadde yaparsan takilmaz. Su anda tek thread calisiyor program, dolayısıyla ayni anda tek islem yapabiliyor process.
-
ZoRKaYa bunu yazdı
Threadlere bak hocam. Butona bastiginda o islemi ayri bir threadde yaparsan takilmaz. Su anda tek thread calisiyor program, dolayısıyla ayni anda tek islem yapabiliyor process.
Araştırdım hocam mümkün bir çözüm. Ama yine de merak ediyorum başka bir şekilde yapılamaz mı diye. Bilen varsa beklemedeyim.
-
Ana thread hem gui hem selenium işlemlerini yapıyor. Ana thread'ı da gui'de oluşturuyorsun. Gui kapanınca ana threadın da kapanıyor. Yani durum gayet normal.
Tüm bu aktardığın problemlerin çözümü için:
1. GUI ve diğer işlemler ayrı thread'larda yapılacak.
ya da
2. Asenkron çalışacak.
Seninkine benzer bir problemin çözümü https://stackoverflow.com/questions/47895765/use-asyncio-and-tkinter-or-another-gui-lib-together-without-freezing-the-gui adresinde verilmiş.
Kolay gelsin. -
YeniHarman bunu yazdı
Ana thread hem gui hem selenium işlemlerini yapıyor. Ana thread'ı da gui'de oluşturuyorsun. Gui kapanınca ana threadın da kapanıyor. Yani durum gayet normal.
Tüm bu aktardığın problemlerin çözümü için:
1. GUI ve diğer işlemler ayrı thread'larda yapılacak.
ya da
2. Asenkron çalışacak.
Seninkine benzer bir problemin çözümü https://stackoverflow.com/questions/47895765/use-asyncio-and-tkinter-or-another-gui-lib-together-without-freezing-the-gui adresinde verilmiş.
Kolay gelsin.Teşekkürler hocam. Bu şekilde halledelim ozaman.