回复:wincc小白

已锁定

0615317263

西门子1847工业学习平台

  • 帖子

    6901
  • 精华

    3
  • 被关注

    107

论坛等级:至圣

注册时间:2022-06-15

钻石 钻石 如何晋级?

发布于 2024-11-01 11:18:21

3楼

展开查看
以下是引用zhangli0在2024-10-31 11:32:37的发言 >1楼

原因分析

当使用 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基础才能体会这些内容。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32569条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。