Pyhton selenium programını butonla çalıştırma

Merhaba,
Selenium kodları ile yapmış olduğum programımı pencere üzerindeki bir butonla çalıştırmak istiyorum.
Buton üzerinde bu tanımlamayı nasıl yapabilirim ?
Teşekkür ederim.

Merhaba, pencereyi oluşturmak için hangi modülü kullandığını bilmediğimden örnek kod veremiyorum ama selenium kodlarını bir fonksiyonun içine yazıp o fonksiyonu da butona tıklandığında çalıştırabilirsin.
Her ne kadar kullandığın modülü bilmesem de Tkinter kullandığını varsayarak bir örnek vereyim:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from tkinter import *

pencere = Tk()

def seleniumkodu():
    driver = webdriver.Firefox()
    driver.get("http://www.python.org")
    assert "Python" in driver.title
    elem = driver.find_element(By.NAME, "q")
    elem.clear()
    elem.send_keys("pycon")
    elem.send_keys(Keys.RETURN)
    assert "No results found." not in driver.page_source
    driver.close()

b = Button(pencere, text = "Tıkla", command = seleniumkodu, bg = "blue", fg = "white")
b.pack(pady = 20, side = LEFT)
pencere.mainloop()

Merhaba,

İlgilendiğiniz için çok teşekkür ederim.
kodları kendi çalışmama göre uyarladım.
Ancak kapatırken “python yanıt vermiyor”
donma sorunu ile karşılaştım.

Bu nereden kaynaklanıyor olabilir ?
kodları da paylaşıyorum.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from tkinter import *
import time

pencere = Tk()
pencere.geometry("800x850")
pencere.title("DENEME")

def seleniumkodu():
    driver_path = "C:\edgedriver\msedgedriver.exe"
    driver = webdriver.Edge(driver_path)
    driver.get("https://ebeyanname.gib.gov.tr/index.html")
    time.sleep(2)
    giriş_yap = driver.find_element_by_id("buton")
    giriş_yap.click()
    main_page = driver.current_window_handle
    for handle in driver.window_handles:
     if handle != main_page:
        login_page = handle
    driver.switch_to.window(login_page)
        
    kullanıcı_kodu = driver.find_element_by_xpath('//*[@id="username"]')
    parola = driver.find_element_by_xpath('//*[@id="password2"]')
    şifre = driver.find_element_by_xpath('//*[@id="password1"]')
    kullanıcı_kodu.send_keys("12345678")
    parola.send_keys("aaaaaa")
    şifre.send_keys("123456")
    time.sleep(3)
    giriş_yap2 = driver.find_element_by_xpath('//*[@id="loginForm"]/table/tbody/tr[5]/td/input')
    giriş_yap2.click()
    time.sleep(60)
    driver.quit()

etiket1 = Label(pencere,text="A FİRMASI",font="Verdana 12", bg="red", fg="white",width=20)
#etiket1.pack(padx = 10, pady = 10, side = LEFT)
etiket1.place(x=2,y=10)

dugme1 = Button(pencere, text = "GİRİŞ", command = seleniumkodu, bg = "blue", fg = "white",width=20)
#dugme1.pack(padx = 10, pady = 20, side = LEFT)
dugme1.place(x=10,y=50)


1 Beğeni

Merhaba, kodu test ettim ve sorun tahmin ettiğim satırdan kaynaklanıyor. time.sleep(60)'dan kaynaklanıyor. Eğer GUI modüllerinde (Tkinter, PyQT5 v.b.) time.sleep gibi fonksiyonlar, while, for gibi keywordler kullanıldığında GUI programının durmasına neden olur çünkü GUI ler sürekli yenilenmesi gerektiğinden (mesela butona tıkladığında animasyon çıkabilmesi için, entry nin içine yazdığın yazının gözümkesi için, hatta belki de butona tıkladığının algılanabilmesi için) GUI ler döngü içinde çalışır. Eğer while, for gibi döngüler GUI nin döngüsünü bekletir. Bu yüzden program donar. Çözümü yok mu ? Var tabii. Döngüyü veya time.sleep gibi metodların kullanıldığı yerleri thread ile çalıştırabilirsiniz.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from tkinter import *
from threading import Thread
import time

pencere = Tk()
pencere.geometry("800x850")
pencere.title("DENEME")

def seleniumkodu():
    driver_path = "msedgedriver.exe"
    driver = webdriver.Edge(driver_path)
    driver.get("https://ebeyanname.gib.gov.tr/index.html")
    time.sleep(2)
    giriş_yap = driver.find_element_by_id("buton")
    giriş_yap.click()
    main_page = driver.current_window_handle
    for handle in driver.window_handles:
     if handle != main_page:
        login_page = handle
    driver.switch_to.window(login_page)
        
    kullanıcı_kodu = driver.find_element_by_xpath('//*[@id="username"]')
    parola = driver.find_element_by_xpath('//*[@id="password2"]')
    şifre = driver.find_element_by_xpath('//*[@id="password1"]')
    kullanıcı_kodu.send_keys("12345678")
    parola.send_keys("aaaaaa")
    şifre.send_keys("123456")
    time.sleep(3)
    giriş_yap2 = driver.find_element_by_xpath('//*[@id="loginForm"]/table/tbody/tr[5]/td/input')
    giriş_yap2.click()
    time.sleep(60)
    driver.quit()

etiket1 = Label(pencere,text="A FİRMASI",font="Verdana 12", bg="red", fg="white",width=20)
#etiket1.pack(padx = 10, pady = 10, side = LEFT)
etiket1.place(x=2,y=10)

seleniumthread = Thread(target = seleniumkodu)

dugme1 = Button(pencere, text = "GİRİŞ", command = seleniumthread.start, bg = "blue", fg = "white",width=20)
#dugme1.pack(padx = 10, pady = 20, side = LEFT)
dugme1.place(x=10,y=50)

seleniumkodu fonksiyonunu thread ile çalıştırırsak sorun çözülecektir.

Çok Teşekkür ederim,
Thread yöntemi ile sorun çözüldü.

1 Beğeni