import tkinter as tk
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
import threading
import time
import psutil
# 設置 Firefox 選項
options = Options()
options.headless = False # 若需無頭模式,設置為 True
options.binary_location = 'C:\\Program Files\\Mozilla Firefox\\firefox.exe' # 指定 Firefox 的路徑
# 指定 GeckoDriver 的路徑
gecko_service = Service('D:\\geckodriver.exe')
# 初始化 driver
driver = None
def open_firefox():
global driver
# 啟動瀏覽器
driver = webdriver.Firefox(service=gecko_service, options=options)
# 打開指定的 URL
driver.get('http://192.168.1.100')
# 啟動監控線程
monitor_thread = threading.Thread(target=monitor_firefox, daemon=True)
monitor_thread.start()
# 等待一段時間後關閉 Firefox
time.sleep(1) # 例如等待 10 秒
driver.quit()
def monitor_firefox():
global driver
# 獲取 Firefox 瀏覽器的進程 ID
firefox_pid = driver.service.process.pid
while psutil.pid_exists(firefox_pid):
time.sleep(0.5) # 減少監控間隔時間
# 在 Firefox 關閉後啟用按鈕
button.config(state=tk.NORMAL)
def on_button_click():
global driver
driver = None
# 禁用按鈕
button.config(state=tk.DISABLED)
# 使用守護線程來執行 Selenium 操作
firefox_thread = threading.Thread(target=open_firefox, daemon=True)
firefox_thread.start()
# 建立主視窗
root = tk.Tk()
root.title("範例視窗")
# 設定視窗大小
root.geometry("300x200")
# 創建按鈕
button = tk.Button(root, text="打開 Firefox", command=on_button_click)
button.pack(pady=20)
# 啟動主事件循環
root.mainloop()
- firefox 無頭模式都試不出來
- firefox 自己按右上角的關閉按鈕無法終結 thread
- driver.quit() 才能真的終結 thread,driver.quit()執行後還要等 4~5 秒才真的結束。
- chrome 無頭模式都試不出來
- chrome 自己按右上角的關閉按鈕無法終結 thread
- driver.quit() 才能真的終結 thread,driver.quit()執行後只要等 0.5 秒才真的結束。
留言
張貼留言