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