【问题标题】:Unable to get htmlelement in winforms webbrowser control无法在 winforms webbrowser 控件中获取 htmlelement
【发布时间】:2011-03-21 09:08:52
【问题描述】:

我正在使用 winforms 网络浏览器控件开发自动化程序。我能够在前几个网页上获得 htmlelement。但是我无法从某些页面获取 htmlelement,并且我使用的方法与我对前几个网页所做的相同(成功检索了前几个页面的 htmlelement)。

        HtmlElement createButton = this.extendedWebBrowser2.Document.GetElementById("createButton");
        HtmlElement textArea = this.extendedWebBrowser2.Document.GetElementById("query");
        HtmlElement filename = this.extendedWebBrowser2.Document.GetElementById("filename");
        HtmlElement cancelBtn = this.extendedWebBrowser2.Document.GetElementById("cancelBtn");

它返回 null 并且我不知道为什么它返回 null 尽管元素存在于页面中。为什么以及怎么做才能检测到 html 元素?哪些原因会导致检测不到?

【问题讨论】:

    标签: c# html winforms


    【解决方案1】:

    我上次尝试使用 webbrowser 控件是很久以前的事了,但是在旧版本的 .net 中有一种方法可以使用这种方式:

    HtmlElement createButton = this.extendedWebBrowser2.Document.Body.GetElementById("createButton");
    

    通知Body

    也许有帮助?

    【讨论】:

    • Tengiz,没有 Body.GetElementById 属性,但有 Body.GetElementByTag。我已经在前几页上尝试过它并且它有效,但不适用于存在我现在面临的问题的某些页面。无法检测到 html 元素...
    • 还有,页面 DOM 是否正确且完整?即它是否有 、 标签?包括他们的结束标签?而且,该页面是来自互联网还是本地文件?
    • 是的,ID 是正确的。页面 DOM 正确且完整。来自网络。
    • 我点击了上面的链接,它会弹出一个窗口。我无法跟踪这个 windows 元素,尽管我可以得到它的 url。但我个人认为是不是弹窗都无所谓。
    【解决方案2】:

    您在等待文档加载事件吗?在文档完成加载之前,DOM 有时不可用。

    您可以订阅an event on the browser control。如果您在那里进行所有处理,则应该没有问题。

    【讨论】:

    • 嗨,john,我尝试在完成加载后使用按钮单击事件执行上面的代码。所以我想这不是由加载问题引起的。我真的不知道为什么 html 元素返回 null :(
    • 检查这些元素的DocumenText,这可能是一个微不足道的拼写错误。以前发生过。
    【解决方案3】:
    if (objBrowser.Document.Window != null) {
        foreach (HtmlWindow myframe in objBrowser.Document.Window.Frames) {
            HtmlElementCollection htmlControls = myframe.Document.Body.GetElementsByTagName("OPTION");
            foreach (HtmlElement optEle in htmlControls) {      
                optEle.SetAttribute("selected", "true");      
            }
        }
    }                  
    

    【讨论】:

      【解决方案4】:

      无法获取Html Elements的原因是Html Elements嵌入在FrameSet中。访问 FrameSet :

      HtmlWindow docWindow = extendedWebBrowser2.Document.Window;
      
      foreach (HtmlWindow frameWindow in docWindow.Frames)
      {
        implementation code...
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-25
        • 2020-05-26
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多