基本上,我要做的是从bing上的 bgDiv
元素中获取背景图像,然后将其用作形式的背景。这就是我到目前为止的。
Try
With bingCheck
Dim bgDiv As HtmlElement = .Document.GetElementById("bgDiv")
Dim imgUrl As String = bgDiv.Style("background-image").ToString
Dim request As HttpWebRequest = DirectCast(HttpWebRequest.Create(imgUrl), HttpWebRequest)
Dim response As Net.HttpWebResponse = DirectCast(request.GetResponse, Net.HttpWebResponse)
Dim grabbedImage As Image = Image.FromStream(response.GetResponseStream)
response.Close()
Me.BackgroundImage = grabbedImage
Me.Update()
End With
Catch ex As Exception
End Try
这似乎不起作用,所以还有其他关于我如何做的想法吗?
首先:您遇到的错误是因为您尝试在字符串上调用索引器(带有字符串键),并且它只有整数索引器。您可以通过查看System.Windows.Forms.HtmlElement.Style property
:
获取或设置当前元素样式的逗号列表。
它将返回当前元素上的所有样式,但作为一个长字符串。还有两种以不同方式获取值的方法,请参见下文。
查看样式属性内容后,它包含以下内容:
"左:0px; top:-0.5px; width:1000px;高度:563px; opacity:1; 1; background -image:url(" http://be.bing.com/az/az/hprichbg?p = rb?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/penzanceharbor_row9689010992_13666x768.jpg")
现在,我认为从那里提取URL非常简单。
现在,第二种方法是访问com对象本身。这需要您引用Microsoft HTML Object Library
(这是COM参考!!)。之后,您可以使用mshtml
名称空间。
在代码中检索BGDIV元素后,我们将DOMELENT投入到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/penzanceharbor_row9689010992_13666x768.jpg")
我以前在说什么?好吧,您不能使用WebBrowser.DocumentCompleted event
,因为CSS尚未应用(并非总是如此),因此getComputedStyle
函数(或Style
属性)将为您提供Nothing
,以换取背景图像。您可以使用计时器查找属性,否则可以使用页面加载后手动单击的按钮(在单击事件中,您检索背景图像)。
根据MSDN,htmlelement的样式属性是字符串。
http://msdn.microsoft.com/en-us/library/system.windows.forms.htmlelement.style.aspx
是名称值对,由半颜色分开。
style-name1:value1;...;[style-nameN:valueN;]
因此您需要解析所需的价值。
Dim styles as String() = bgDiv.Style.Split(";")