恭喜,你发布的帖子
发布于 2024-11-01 11:18:21
3楼
原因分析
当使用 WinCC 的 WebBrowser 控件来显示监控画面时,每次切换画面后需要重新输入用户名和密码,可能是因为 WebBrowser 没有正确保存或传递认证信息。这通常与浏览器控件的安全设置和认证机制有关。在不同的画面切换时,浏览器可能会认为这是一个新的会话,从而要求重新进行身份验证。
可能的解决方案
如果摄像头的登录界面支持 JavaScript,你可以尝试编写一个自动登录脚本。首先,通过 WebBrowser 控件的 Document 属性获取网页的文档对象。例如,假设摄像头登录页面的用户名输入框的 ID 为 “username”,密码输入框的 ID 为 “password”,登录按钮的 ID 为 “loginButton”,可以在 WinCC 的全局脚本(如 VBScript 或 C#)中编写如下代码来注入自动登录脚本:
在 VBScript 中:
使用自动登录脚本(JavaScript):
收起
vbscript
复制
Dim oBrowser : Set oBrowser = ScreenItems("WebBrowser1") '假设WebBrowser控件名为WebBrowser1'
Dim sScript
sScript = "var usernameInput = document.getElementById('username');"
sScript = sScript & "var passwordInput = document.getElementById('password');"
sScript = sScript & "var loginButton = document.getElementById('loginButton');"
sScript = sScript & "usernameInput.value = 'your_username';"
sScript = sScript & "passwordInput.value = 'your_password';"
sScript = sScript & "loginButton.click();"
oBrowser.Document.parentWindow.execScript sScript, "JavaScript"
在 C# 中(需要在 WinCC 项目中添加对System.Windows.Forms和System.Runtime.InteropServices的引用):
收起
csharp
复制
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
//...
private void AutoLogin()
{
AxSHDocVw.AxWebBrowser oBrowser = (AxSHDocVw.AxWebBrowser)ScreenItems["WebBrowser1"];
object doc = oBrowser.Document;
if (doc!= null)
{
string sScript = "var usernameInput = document.getElementById('username');" +
"var passwordInput = document.getElementById('password');" +
"var loginButton = document.getElementById('loginButton');" +
"usernameInput.value = 'your_username';" +
"passwordInput.value = 'your_password';" +
"loginButton.click();";
((mshtml.HTMLDocument)doc).parentWindow.execScript(sScript, "JavaScript");
}
}
注意:上述代码中的your_username和your_password需要替换为实际的用户名和密码。同时,需要确保正确获取了用户名输入框、密码输入框和登录按钮的 ID,这些 ID 可能因摄像头品牌和登录界面设计而不同。
保存和传递认证信息(Cookies):
另一种方法是尝试保存和传递认证 Cookies。WebBrowser 控件在进行网页访问时会处理 Cookies。如果能够获取并保存首次登录时的 Cookies,然后在切换画面后重新应用这些 Cookies,可能可以避免重新输入用户名和密码。不过,这种方法比较复杂,因为涉及到对 Cookies 的管理和操作。
首先,在首次登录成功后,需要获取 Cookies。可以通过WebBrowser1.Document.Cookie(假设 WebBrowser 控件名为 WebBrowser1)来获取 Cookies 的字符串表示。将这个 Cookies 字符串保存到一个变量或者 WinCC 的全局变量中。
当切换画面后,在重新加载摄像头监控页面之前,尝试将保存的 Cookies 字符串重新设置到 WebBrowser 控件的Document.Cookie属性中。不过,这种方法可能会受到摄像头网站的安全策略限制,例如,有些网站可能会设置 Cookies 的有效期、路径和域等限制条件,导致重新设置 Cookies 无效。
支持这楼,看了之后深有体会。有IT基础才能体会这些内容。
请填写推广理由:
分享
只看
楼主