如何使用QWebEngineView通过id获取页面元素
How to get page element by id using QWebEngineView
如何获取页面 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
你必须使用 "mainFlash" 对象,但你使用 TabsWidgets class 这有点不合逻辑(我建议你回顾一下 OOP 的基本概念:class 和 object/instance).另外,javascript区分大小写,所以"value"不同于"Value",后者属性不属于DOM个元素。
综合以上,解决方案是:
class TabsWidgets(QWidget):
def __init__(self, parent):
# ...
self.mainFlash.load(QUrl("https://www.facebook.com/login.php"))
<b>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();
""")</b>
如何获取页面 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
你必须使用 "mainFlash" 对象,但你使用 TabsWidgets class 这有点不合逻辑(我建议你回顾一下 OOP 的基本概念:class 和 object/instance).另外,javascript区分大小写,所以"value"不同于"Value",后者属性不属于DOM个元素。
综合以上,解决方案是:
class TabsWidgets(QWidget):
def __init__(self, parent):
# ...
self.mainFlash.load(QUrl("https://www.facebook.com/login.php"))
<b>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();
""")</b>