【问题标题】:How to get page element by id using QWebEngineView如何使用 QWebEngineView 通过 id 获取页面元素
【发布时间】:2020-04-06 07:21:34
【问题描述】:

如何获取页面ElementById,以便填写输入值?

import sys
from PyQt5 import QtWebEngineWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QAction
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget, QMainWindow


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.iniGUI()  # App GUI
        self.table_widget = TabsWidgets(self)  # tabs
        self.setCentralWidget(self.table_widget)
        self.setWindowIcon(QIcon(r"images\title_icons.png"))

    def iniGUI(self):
        self.setWindowTitle("Team")
        self.resize(1500, 900)  # Width, height
        self.add_guiMenu_widgets()  # top menu

    # main window menu
    def add_guiMenu_widgets(self):
        self.statusBar().showMessage("Team")
        main_menu = self.menuBar()
        file_menu = main_menu.addMenu("File")
        help_menu = main_menu.addMenu("Help")

        # file menu button
        exit_button = QAction(QIcon("exit.png"), "Exit", self)
        exit_button.setShortcut("Ctrl+Q")
        exit_button.setStatusTip("Exit Application")
        exit_button.triggered.connect(QApplication.instance().quit)
        file_menu.addAction(exit_button)

        # help menu button
        about_button = QAction(QIcon("about.png"), "About", self)
        about_button.setShortcut("Ctrl+H")
        about_button.setStatusTip("About Application")
        help_menu.addAction(about_button)


def load_finished():
    print("Web Page is loaded")
    TabsWidgets.mainFlash.page().runJavaScript("document.getElementById('email').Value ='0m3r'")


class TabsWidgets(QWidget):
    def __init__(self, parent):
        super(TabsWidgets, self).__init__(parent)
        self.layout = QVBoxLayout()

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tab_mainFlash = QWidget()

        # Add tabs
        self.tabs.addTab(self.tab_mainFlash, " Flash - Main ")

        # Create tab_mainFlash
        self.tab_mainFlash.layout = QVBoxLayout(self)
        self.mainFlash = QtWebEngineWidgets.QWebEngineView()
        self.tab_mainFlash.layout.addWidget(self.mainFlash)
        self.tab_mainFlash.setLayout(self.tab_mainFlash.layout)
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)
        self.mainFlash.load(QUrl(
            "https://www.facebook.com/login.php"))
        self.mainFlash.loadFinished.connect(load_finished)

        # self.mainFlash.page().runJavaScript("document.getElementById('email').Value ='0m3r'")
        # self.mainFlash.page().runJavaScript("document.getElementById('pass').Value ='0m3r'")


if __name__ == "__main__":
    application = QApplication(sys.argv)  # create Application
    application.setStyle("Fusion")  # stylesheet
    appGui = MainWindow()  # create instance of class
    appGui.show()  # show the constructed window
    sys.exit(application.exec_())  # execute the application

【问题讨论】:

    标签: javascript python pyqt pyqt5 qtwebengine


    【解决方案1】:

    您必须使用“mainFlash”对象,但您使用的 TabsWidgets 类有点不合逻辑(我建议您复习 OOP 的基本概念:类和对象/实例)。另外,javascript是区分大小写的,所以“value”和“Value”是不同的,后者的属性不属于DOM元素。

    综合以上情况,解决办法是:

    class TabsWidgets(QWidget):
        def __init__(self, parent):
            # ...
    
            self.mainFlash.load(QUrl("https://www.facebook.com/login.php"))
            self.mainFlash.loadFinished.connect(self.on_load_finished)
    
        def on_load_finished(self, ok):
            if ok:
                self.mainFlash.page().runJavaScript("""
                    document.getElementById('email').value ='0m3r';
                    document.getElementById('pass').value ='0m3r';
                    // click
                    document.getElementById('loginbutton').click();
                """)

    【讨论】:

    • 谢谢你,@eyllanesc- 我会阅读更多关于 OOP 的概念
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2020-12-24
    • 2017-05-26
    • 2010-12-19
    • 2016-06-19
    相关资源
    最近更新 更多