まず最初に、文字列に対して (文字列キーを使用して) インデクサーを呼び出そうとすると、整数インデクサーしかないため、エラーが発生します。あなたはこれを見ることでこれを知ることができますSystem.Windows.Forms.HtmlElement.Style property
:
現在の要素のスタイルのコンマ区切りリストを取得または設定します。
現在要素にあるすべてのスタイルを返しますが、長い文字列として返されます。別の方法で値を取得するには、他に 2 つの方法があります。以下を参照してください。
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()
しかし、まだ 1 つの問題があります。最後の段落を参照してください。
それらの2つの他の方法について。
最初の方法は、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 を抽出するのは非常に簡単だと思います。
2 番目の方法は、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
背景画像と引き換えに提供します。タイマーを使用してプロパティを探すか、ページがロードされた後に手動でクリックするボタンを使用できます (クリック イベントで背景画像を取得します)。