from common import * import sys from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from PySide6.QtWebEngineWidgets import QWebEngineView from PySide6.QtCore import QUrl, QTimer # 示教器页面 class TeachBrowser(QWidget): def __init__( self, parent=None, url="http://192.168.58.2/login.html", username="admin", password="123", ): super().__init__(parent=parent) self.setWindowTitle("示教器页面") # self.setGeometry(100, 100, 1024, 768) # 1. 配置登录信息 self.login_username = username # 登录的用户名 self.login_password = password # 登录的密码 # 2. 初始化浏览器视图 self.web_view = QWebEngineView() # 加载登录页面 self.web_view.load(QUrl(url)) # 3. 绑定网页加载完成信号 self.web_view.loadFinished.connect(self.onPageLoaded) # 4. 设置窗口布局 layout = QVBoxLayout(self) layout.addWidget(self.web_view) def onPageLoaded(self, success): """页面加载完成后,执行登录逻辑""" if not success: # print("登录页面加载失败!") return self.injectLoginJs() self.web_view.loadFinished.disconnect(self.onPageLoaded) def injectLoginJs(self): """注入 JavaScript 代码,自动输入用户名和密码""" auto_login_js = f""" // 1. 等待 AngularJS 完全初始化(确保能获取到 scope) function waitForAngular() {{ return new Promise((resolve) => {{ const checkAngular = () => {{ // 判断 Angular 是否加载完成,且登录表单(if_Login0)已显示 if (window.angular && document.querySelector('#loginForm')) {{ resolve(); }} else {{ setTimeout(checkAngular, 200); // 每 200ms 检查一次 }} }}; checkAngular(); }}); }} // 2. 核心登录逻辑 async function autoLogin() {{ await waitForAngular(); // 等待 Angular 初始化 // 获取第一个登录表单(id="loginForm",ng-if="if_Login0")的 Angular 作用域 const loginForm = document.querySelector('#loginForm'); const scope = window.angular.element(loginForm).scope(); if (!scope) {{ return; }} // 3. 填充用户名和密码(对应 ng-model="$parent.userName" 和 "$parent.password") scope.$apply(() => {{ scope.$parent.userName = "{self.login_username}"; // 用户名 scope.$parent.password = "{self.login_password}"; // 密码 }}); }} // 执行登录 autoLogin(); """ # 执行注入的 JS 代码 self.web_view.page().runJavaScript(auto_login_js) if __name__ == "__main__": app = QApplication(sys.argv) window = TeachBrowser() window.show() sys.exit(app.exec())