Webdriver açık kalma

Merhaba,
Selenium webdriver, kodlar aşağıdaki gibi olduğunda belirtilen sürede otomatik kapanıyor.
time.sleep(60)
browser.quit()

Ancak ben bu süreyi beklemeyip işim bittiğinde kendim tarayıcıyı kapattığımda webdriver kapanmıyor açık kalıyor.
Tarayıcıyı kendim kapattığımda webdriverin da kapanmasını nasıl sağlarım ?
Desteğiniz için teşekkür ederim.

Merhaba, birkaç çözüm buldum:

DISCONNECTED_MSG = 'Unable to evaluate script: disconnected: not connected to DevTools\n'

while True:
    if driver.get_log('driver')[-1]['message'] == DISCONNECTED_MSG:
        driver.close() # tarayıcı kapandığında burası çalışıyor
    time.sleep(1)

veya

import selenium
from selenium import webdriver
browser = webdriver.Firefox()

# Now wait if someone closes the window
while True:
    try:
        _ = browser.window_handles
    except selenium.common.exceptions.InvalidSessionIdException as e:
        break
    time.sleep(1)

# tarayıcı kapandığında burası çalışıyor
driver.close()

Merhaba,

Çok Teşekkür ederim Furkan Bey,
Her iki yolu denedim ama olmadı
Belki ben yanlış uygulamış olabilirim.
Kodları görmeniz için 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)

Merhaba, msedgedriver’ın mı kapanmasını istiyorsunuz ? Ben açılan microsoft edge tarayıcıyı kendim (daha işlem bitmeden) kapattım ve beraberinde msedgedriver’da kapandı.

Programı biraz daha test ettim. Selenium tarayıcı üzerinde işlem yaparken tarayıcıyı kapatırsam driver da kapanıyordu ancak time.sleep(60) başladıktan sonra tarayıcıyı kapattığımda driver kapanmadı. O yüzden şöyle yaptım:

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
from subprocess import check_output
import time
import signal
import psutil
import os

def if_process_is_running_by_exename(exename='msedge.exe'):
    for proc in psutil.process_iter(['pid', 'name']):
        # This will check if there exists any process running with executable name
        if proc.info['name'] == exename:
            return True
    return False

def find_pid(exename='msedgedriver.exe'):
    for proc in psutil.process_iter(['pid', 'name']):
        if proc.info['name'] == exename:
            return proc.info['pid']

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

def driverkapat():
    try:
        while True:
            if not if_process_is_running_by_exename():
                os.kill(int(find_pid()), signal.CTRL_BREAK_EVENT)
            time.sleep(1)
    except:
        pass

def seleniumkodu():
    global driver
    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()
    driverthread = Thread(target = driverkapat)
    driverthread.start()
    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)

kodun çalışması için psutil modülüne ihtiyacınız olacak. cmd yi açın ve pip install psutil yazıp çalıştırın.

Tekrar Merhaba,
Sorun hala devam etmekte.
ilk önce Psutil’i yükledim.
Daha sonra sizin kodları olduğu gibi yapştırıp sadece path kısmını (driver_path = “C:\edgedriver\msedgedriver.exe”
driver = webdriver.Edge(driver_path) değiştirdim.
Progarama giriş yapıp son ekran açıldıktan sonra 10 saniye gibi bekledim ve Edge yi kapattım.
Ancak msedgedriver.exe yine buradaki (time.sleep(60)) süreye göre kapandı.

Merhaba, birde şunu dener misiniz ?

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
from subprocess import check_output
import time
import signal
import psutil
import os

def if_process_is_running_by_exename(exename='msedge.exe'):
    for proc in psutil.process_iter(['pid', 'name']):
        # This will check if there exists any process running with executable name
        if proc.info['name'] == exename:
            return True
    return False

def find_pid(exename='msedgedriver.exe'):
    for proc in psutil.process_iter(['pid', 'name']):
        if proc.info['name'] == exename:
            return proc.info['pid']

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

def driverkapat():
    try:
        while True:
            if not if_process_is_running_by_exename():
                os.kill(int(find_pid()), signal.CTRL_BREAK_EVENT)
            time.sleep(1)
    except:
        pass

def seleniumkodu():
    global driver
    driver_path = "msedgedriver.exe"
    driver = webdriver.Edge(driver_path)
    driver.get("https://ebeyanname.gib.gov.tr/index.html")
    driverthread = Thread(target = driverkapat)
    driverthread.start()
    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)

Çalışmamasının sebebi arka plan da çalışan bir msedge.exe dosyası da olabilir.

Merhaba,
Bu kodları uyguladım.
Ancak değişen bir şey olmadı.
Edge tarayıcıyı kapattığımda Edge webdriver kapanmadı.
Buradaki ( time.sleep(60) ) zamana göre bekleyip kapandı.

Microsoft Edge son sürüme guncellendikten sonra bende de öyle oldu. Arkaplanda Microsoft Edge açık kalıyor sanırım ondan. Başka yöntem bulursam deneyeceğim.

1 Beğeni