Files
fluent_widgets_pyside6/test_teachhtml.py

97 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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())