Get Bing Background VB.Net



基本上,我要做的是从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(";")

最新更新