提问人:larley 提问时间:11/11/2023 更新时间:11/11/2023 访问量:24
关闭打开的 Selenium 浏览器也会关闭 PyQt 主窗口
Closing opened Selenium Browser closes PyQt Main Window too
问:
提供的代码打开一个 PyQt5 窗口,用户可以在其中启动 selenium 浏览器。 问题是当我关闭浏览器时,主窗口也会关闭。
test.py
from PyQt5 import QtWidgets
from selenium import webdriver
import sys, json
def isRunning(driver):
try:
driver.window_handles
return True
except Exception:
return False
def handleButton2():
print("test")
app = QtWidgets.QApplication(sys.argv)
def handleButton():
profile = webdriver.FirefoxProfile('selenium')
driver = webdriver.Firefox(profile)
driver.get('https://duckduckgo.com/')
logs = []
curr = ''
while isRunning(driver):
if curr != driver.current_url:
logs = []
curr = driver.current_url
log = driver.execute_script(
"return window.performance.getEntries();")
for x in log:
if x not in logs:
logs.append(x)
s = str(x).replace("'", '"')
s = s.replace(': "', ': ').replace('", ', ', ')
s = s.replace(': ', ': "').replace(', ', '", ')
s = s.replace('"}', '}').replace('}', '"}')
s = s.replace(': "[', ': [').replace(': "{', ': {')
s = s.replace(']"', ']').replace('}"', '}')
print(s)
url = json.loads(s)['name']
if url.startswith('http'):
print(url)
app.processEvents() # VERY important
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.button = QtWidgets.QPushButton('Test')
self.button.clicked.connect(handleButton)
self.button2 = QtWidgets.QPushButton('Test2')
self.button2.clicked.connect(handleButton2)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.button)
layout.addWidget(self.button2)
def mainGUI():
window = Window()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
mainGUI()
我知道 while 循环停止是导致这种情况的原因,但我不知道如何解决它。 我试图在循环停止后重新打开窗口,但这没有用。
答:
0赞
aazizzailani
11/11/2023
#1
避免阻塞 while 循环导致的 main 事件循环。相反,使用Qt定期检查浏览器窗口是否打开。自定义计时器间隔以满足应用程序的需求。handleButton
QTimer
评论