如何使用QWebEngineView通过id获取页面元素

问题描述 投票:1回答:1

如何获得页面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个回答
1
投票

您必须使用“ mainFlash”对象,但使用的TabsWidgets类有点不合逻辑(我建议您回顾一下OOP的基本概念:类和对象/实例)。另外,javascript是区分大小写的,因此“值”与“值”不同,并且后者属性不是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();
            """)
© www.soinside.com 2019 - 2024. All rights reserved.