そこで、Button1のクリックイベントに以下のコードをいれてみました。
Dim all As HtmlElementCollection = WebBrowser1.Document.All
Dim forms As HtmlElementCollection = all.GetElementsByName("strong1")
Clipboard.SetText(forms(0).InnerText)
しかし、これではエラーが発生し、正常に取得できていない模様です。
コピーしたいのは、HTMLの以下の部分(例)で、
<span class="strong1">サンプル</span>
idの取得が出来ることは知っていたのですが、class内の文字列を取得することはできないのですか?
なにか別の対処法もしくは改善点があれば、ご教授願います。
ちなみに、<span class="strong1">の部分を毎回コピーする作業をしているので、これを簡単にしようと思っています。
GetElementsByNameはidやname属性に対するものでclassはみません。
ぱっと見た感じ、.Netにはそういうメソッドない様なので、for eachで回しながらGetAttributeでclass属性を取得して比較し、一つ一つ探すことになりそうです。
ちなみに、自身のタグも含めHTMLとして取得する場合は、InnerTextではなくOuterHtmlになると思います。
GetElementsByNameはidやname属性に対するものでclassはみません。
ぱっと見た感じ、.Netにはそういうメソッドない様なので、for eachで回しながらGetAttributeでclass属性を取得して比較し、一つ一つ探すことになりそうです。
ちなみに、自身のタグも含めHTMLとして取得する場合は、InnerTextではなくOuterHtmlになると思います。
CSSのセレクタでいう所の"span.strong1"相当だと以下です。
For Each es As HtmlElement In WebBrowser1.Document.GetElementsByTagName("span") If es.GetAttribute("className") = "strong1" Then Clipboard.SetText(es.OuterHtml) Exit For End If Next
"span.strong1"ではなく".strong1"ならば「GetElementsByTagName("span")」を「All」に変えてください。
あと、欲しいのがタグ全体なのか、間の表示されているテキストなのかで、「OuterHtml」か「InnerText」かが決まります。
有難うございます!ちょっと一時期パソコンが出来ない環境でして、遅れてすみません。
id:TransFreeBSD さん作成の回答No1.を参考に、
VBS ですが、
.getElementsByTagName("span")を使用してテストしてみました。
(VB.NETのテスト/ソースじゃなくてすみません)
'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.application") objIE.Top = 100 objIE.Left = 100 objIE.Width = 1024 objIE.Visible = True 'ページを開く(.Navigateで表示する。) objIE.Navigate "http://dec2011.top1-12.info/test1223.html" Wscript.Sleep 1000 '1000で1秒 '読み込み完了となるまで、ループする。 While objIE.ReadyState <> 4 Or objIE.Busy 'READYSTATE_COMPLETE = 4 Wscript.Sleep 100 '0.1秒待つ、1000で1秒 Wend Wscript.Sleep 1000 '1秒 'spanのタグを集める .getElementsByTagName("span")を使用 Set objspan = objIE.Document.getElementsByTagName("span") 'ループで頭から表示 strTEXT = "" '空白で初期化 For n = 0 To objspan.Length - 1 '※ HTMLの外と中を探したいので、.OuterHTMLと.InnerTEXTを使用 Msgbox objspan(n).OuterHTML 'class="strong1"が↑class=strong1になっているのが気になるが If Instr(objspan(n).OuterHTML,"class=strong1") > 0 Then strTEXT = objspan(n).InnerTEXT 'ほしいのは中の文字なので.InnerTEXTをセット Exit For '一番最初に見つけたデータのみ処理する End If ' Next Msgbox "見つけたのは " & strTEXT & "です" '全て .OuterHTMLを使用して探してみた 'IEを閉じたり、後始末 'objIE.Quit 'でパックなのでコメントアウト IEを閉じたり、後始末をする
'spanのタグを集める .getElementsByTagName("span")を使用
Set objspan = objIE.Document.getElementsByTagName("span")
でテストしてみました。
.getElementsByTagNameで"span"を指定して、
.OuterHTMLで確認後、.InnerTEXTで取得してみてください。
.netで処理する時の参考となれば幸いです。
CSSのセレクタでいう所の"span.strong1"相当だと以下です。
"span.strong1"ではなく".strong1"ならば「GetElementsByTagName("span")」を「All」に変えてください。
2011/12/23 13:49:09あと、欲しいのがタグ全体なのか、間の表示されているテキストなのかで、「OuterHtml」か「InnerText」かが決まります。
有難うございます!ちょっと一時期パソコンが出来ない環境でして、遅れてすみません。
2011/12/26 16:36:41