我目前有一個對我來說毫無意義的問題。我正在制作一個使用 selenium web 驅動程式在網站上運行腳本的程式。這與我用 Tkinter 制作的 GUI 配對。簡而言之,我在 gui 中有一個“啟動”按鈕,設定為觸發此功能:
def launch_script(browser, url):
clear_widgets()
import script
script.initialize(browser, url)
“腳本”是一個外部 .py 檔案,其中包含配置和啟動瀏覽器的代碼,“clear_widgets”是一個銷毀螢屏上所有小部件的函式。
def clear_widgets():
for widget in window.winfo_children():
widget.destroy()
這是“script.initialize”函式:
def initialize(selectedBrowser, url):
import selenium, os
from selenium import webdriver
if os.name=="nt":
dir=f"{os.path.expanduser('~')}/AppData/Roaming/Gimkit Cheats"
elif os.name=="posix":
dir=f"{os.path.expanduser('~')}.config"
else:
raise Exception("Unrecognized operating system.")
SystemExit()
# get webdriver executable
driverExecutable=f"{dir}/{selectedBrowser}driver.exe"
# hide Seleneum logging
opt=webdriver.chrome.options.Options()
opt.add_experimental_option('excludeSwitches', ['enable-logging'])
# get active webdriver
match selectedBrowser:
case "Chrome":
driver = webdriver.Chrome(driverExecutable, options=opt)
case "Firefox":
driver = webdriver.Firefox(driverExecutable, options=opt)
case "Edge":
driver = webdriver.Edge(driverExecutable, options=opt)
# open Gimkit
driver.get(url)
令我困惑的問題是,直到“script.initialize”完全打開并加載 chrome 頁面之后,“clear_widgets”函式才運行。起初,我認為它可能正在啟動清除功能,然后不等待它完成,但在兩者之間添加延遲沒有任何作用。
如果您需要有關我的程式的更多資訊,請發表評論
uj5u.com熱心網友回復:
沒有人發布實際答案,但我找到了解決問題的方法——我誤解了該mainloop()函式的作業原理以及它如何處理其他事件。我不會詳細介紹,但after()我需要的是 tkinter 方法,因為它的設計目的是不干擾主回圈的處理。這是我最終使用的代碼:
def launch_script(browser, url):
import script
clear_widgets()
lbl_loading=tk.Label(text="Loading...", font=("Arial", 36))
lbl_loading.pack()
def init():
script.initialize(browser, url)
lbl_loading.destroy()
draw_page2()
window.after(100, func=init)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/486925.html
標籤:Python python-3.x 硒 tkinter
