WebBrowser.DocumentText

时间:2012-02-29 15:15:50

标签: c# html winforms browser

我花了2个小时试图找出我的代码出了什么问题。基本上,这就是我所做的:

        if (browser.DocumentText.Contains("Something"))
        {
            [do somwthing]
        }

我在运行此命令之前在WebBrowser控件中呈现了页面,所以我确定文本在那里,但它仍然返回false。

我做了一些调试,我发现browser.DocumentText包含一些奇怪的HTML形式。

现在我可以通过文档中的标签进行迭代并从那里获取文本,但有没有办法通过查看HTML来实现呢?

1 个答案:

答案 0 :(得分:1)

让我为你提供一个更好的方法,不使用.DocumentText并且必须解析所有这些字符串,erk。

如果wbMain是您的WebBrowser1控件,请执行以下操作。

首先,您需要获取您的元素的参考,假设您想要访问页面上的第一个<A>链接,您可以根据需要循环显示所有元素。

这是在VB中,但它与C#中的相同,只是语法不同。

Dim i As Integer
Dim aElement As HTMLAnchorElement = wbMain.Document.All.getElementByTagName("A")(0)

For i = 0 To aElement.attributes.length - 1
  MsgBox aElement.attributes.item(i).name & "=" & aElement.attributes.item(i).value
Next i

这将遍历所有属性并以name=value格式显示在MSGBOX中。

如果您想通过名称(属性名称)进行检索,只需使用aElement.getAttribute("target")进行调用,即可从链接中检索目标属性值。

如果您想确认自己拥有正确的对象/元素,只需执行aElement.outerHTML即可获取该元素的完整HTML代码。

由于我使用的是pre.NET版本,如果它给你带来麻烦,可以随意将声明从HTMLAnchorElement更改为IHTMLAnchorElement,当然,如果你想浏览页面上的所有元素,你可以使用IHTMLElement,然后所有你需要做的是wbMain.Document.All(0)为页面上的第一个元素,或循环直到.All.length - 1来完成所有。请记住,如果您使用嵌套的For循环,请不要使用i两次,对其中一个使用j:)。

如果这回答了您的问题,或者我能做些什么来帮助解决您的问题,请告诉我。