簡體   English   中英

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://stackoverflow.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://stackoverflow.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://stackoverflow.com/")

    def btn_2_clicked(self):
        self.driver.get("https://www.google.com")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM