Selenium 不断开新window
Selenium keeps opening new window
我用 PyQT5 制作了 GUI,一些按钮使用 Selenium 连接到代码。
按钮工作正常,但问题是当我单击按钮时,Selenium 不断打开新的 window。
如果我在 class 之外定义变量“driver = webdriver.Edge(~~)”,Selenium 在一个 window 中工作正常。但是,我想在单击按钮时打开浏览器,而不是在代码的开头。
1. btn_1_clicked 和 btn_2_clicked 在一个 window 中工作,但问题是当我 运行 代码时浏览器打开。
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import QCoreApplication, Qt
from selenium import webdriver
driver = webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
form_class = uic.loadUiType('C:/Users/HOME/Desktop/test.ui')[0]
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btn_1.clicked.connect(self.btn_1_clicked)
self.btn_2.clicked.connect(self.btn_2_clicked)
def btn_1_clicked(self):
driver.get("https://whosebug.com/")
def btn_2_clicked(self):
driver.get("https://www.google.com")
if __name__ == "__main__":
app = QCoreApplication.instance()
if app is None:
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
2。浏览器仅在我单击按钮时打开,但问题是 Selenium 不断打开新的 window.
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import QCoreApplication, Qt
from selenium import webdriver
form_class = uic.loadUiType('C:/Users/HOME/Desktop/test.ui')[0]
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btn_1.clicked.connect(self.btn_1_clicked)
self.btn_2.clicked.connect(self.btn_2_clicked)
def btn_1_clicked(self):
driver = webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
driver.get("https://whosebug.com/")
def btn_2_clicked(self):
driver = webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
driver.get("https://www.google.com")
if __name__ == "__main__":
app = QCoreApplication.instance()
if app is None:
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
提前致谢。
你应该让驱动程序成为一个实例属性,并且只在需要的时候创建它。
使用 cached_property
第一次请求 属性 时加载驱动程序,然后它将始终使用返回的驱动程序:
from functools import cached_property
class WindowClass(QWidget):
# ...
@cached_property
def driver(self):
return webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
def btn_1_clicked(self):
self.driver.get("https://whosebug.com/")
def btn_2_clicked(self):
self.driver.get("https://www.google.com")
我用 PyQT5 制作了 GUI,一些按钮使用 Selenium 连接到代码。
按钮工作正常,但问题是当我单击按钮时,Selenium 不断打开新的 window。
如果我在 class 之外定义变量“driver = webdriver.Edge(~~)”,Selenium 在一个 window 中工作正常。但是,我想在单击按钮时打开浏览器,而不是在代码的开头。
1. btn_1_clicked 和 btn_2_clicked 在一个 window 中工作,但问题是当我 运行 代码时浏览器打开。
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import QCoreApplication, Qt
from selenium import webdriver
driver = webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
form_class = uic.loadUiType('C:/Users/HOME/Desktop/test.ui')[0]
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btn_1.clicked.connect(self.btn_1_clicked)
self.btn_2.clicked.connect(self.btn_2_clicked)
def btn_1_clicked(self):
driver.get("https://whosebug.com/")
def btn_2_clicked(self):
driver.get("https://www.google.com")
if __name__ == "__main__":
app = QCoreApplication.instance()
if app is None:
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
2。浏览器仅在我单击按钮时打开,但问题是 Selenium 不断打开新的 window.
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import QCoreApplication, Qt
from selenium import webdriver
form_class = uic.loadUiType('C:/Users/HOME/Desktop/test.ui')[0]
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btn_1.clicked.connect(self.btn_1_clicked)
self.btn_2.clicked.connect(self.btn_2_clicked)
def btn_1_clicked(self):
driver = webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
driver.get("https://whosebug.com/")
def btn_2_clicked(self):
driver = webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
driver.get("https://www.google.com")
if __name__ == "__main__":
app = QCoreApplication.instance()
if app is None:
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
提前致谢。
你应该让驱动程序成为一个实例属性,并且只在需要的时候创建它。
使用 cached_property
第一次请求 属性 时加载驱动程序,然后它将始终使用返回的驱动程序:
from functools import cached_property
class WindowClass(QWidget):
# ...
@cached_property
def driver(self):
return webdriver.Edge('C:/Users/HOME/Desktop/MicrosoftwebDriver.exe')
def btn_1_clicked(self):
self.driver.get("https://whosebug.com/")
def btn_2_clicked(self):
self.driver.get("https://www.google.com")