97 lines
3.2 KiB
Python
97 lines
3.2 KiB
Python
|
|
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())
|