AI 寫的打開 firefox 後再關閉

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 秒才真的結束。

留言