首先要做的事情:您得到的错误是因为您尝试在字符串上调用索引器(使用字符串键),并且它只有一个整数索引器。您可以通过查看以下内容了解这一点System.Windows.Forms.HtmlElement.Style property
:
获取或设置当前元素的以逗号分隔的样式列表。
它将返回当前元素上的所有样式,但作为一个长字符串。还有另外两种以不同方式获取值的方法,见下文。
查看 Style 属性内容后,它包含以下内容:
"左:0px;上:-0.5px;宽:1000px;高:563px;不透明度:1;背景图像:url("http://be.bing.com/az/hprichbg?p=rb%2fPenzanceHarbor_ROW9689010992_1366x768. jpg");"
您可以使用此方法轻松检索值:
Dim bgimage As String
bgimage = Array.Find(Of String)(bgDiv.Style.Split("; "),
Function(s As String) s.Contains("background-image")) _
.Replace("background-image:", "") _
.Trim()
但是还有一个问题,见最后一段。
关于其他两种方法。
第一种方法是调用HtmlDocument.InvokeScript(String, Object()) Method
. 这将使用提供的参数执行给定的 JavaScript 函数并返回该函数的(返回)值。现在,我们可以使用哪个功能?好吧,我们可以用eval
这个表达式来返回bgDiv
元素的背景图像。代码将如下所示:
Dim bgimage As String
bgImage = bingCheck _
.Document _
.InvokeScript("eval",
{"window.getComputedStyle(document.getElementById(""bgDiv"")).backgroundImage"})
它返回以下值:
url("http://be.bing.com/az/hprichbg?p=rb%2fPenzanceHarbor_ROW9689010992_1366x768.jpg")
现在我认为从那里提取 URL 非常简单。
现在第二种方法是访问 COM 对象本身。这需要你引用Microsoft HTML Object Library
(它是一个 COM 引用!!)。之后,您可以使用mshtml
命名空间。
在代码中检索 bgDiv 元素后,我们将 DomElement 转换为 COM 对象,我们可以通过那里访问属性。以下代码可以做到这一点:
Dim bgDiv As HtmlElement = bingCheck.Document.GetElementById("bgDiv")
Dim bgimage As String = DirectCast(bgDiv.DomElement, mshtml.IHTMLElement2) _
.currentStyle _
.backgroundImage
在 bgimage 变量中,您会发现与前一种方法相同的输出:
url("http://be.bing.com/az/hprichbg?p=rb%2fPenzanceHarbor_ROW9689010992_1366x768.jpg")
我之前说的问题是什么?好吧,您不能使用 ,WebBrowser.DocumentCompleted event
因为尚未(并非总是)应用 CSS,因此该getComputedStyle
函数(或Style
属性)将为您Nothing
提供背景图像的回报。您可以使用计时器来查找属性,也可以使用在页面加载后手动单击的按钮(并在单击事件中检索背景图像)。