人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VB.NETで、ページのHTMLの指定の部分を簡単にコピーしようと思っています。
そこで、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">の部分を毎回コピーする作業をしているので、これを簡単にしようと思っています。

●質問者: hokuto0127
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● TransFreeBSD
ベストアンサー

GetElementsByNameはidやname属性に対するものでclassはみません。
ぱっと見た感じ、.Netにはそういうメソッドない様なので、for eachで回しながらGetAttributeでclass属性を取得して比較し、一つ一つ探すことになりそうです。
ちなみに、自身のタグも含めHTMLとして取得する場合は、InnerTextではなくOuterHtmlになると思います。


hokuto0127さんのコメント
GetAttributeで検索すると、ちょうどこちらの記事が参考になると思い、してみました。 http://www.atmarkit.co.jp/fdotnet/dotnettips/908classname/classname.html >|vb| For Each es As HtmlElement In WebBrowser1.Document.GetElementsByTagName("strong1") Dim c As String = es.GetAttribute("className") Clipboard.SetText(c) Next ||< これでもできませんでした。 For Each外にすると指定ができないので中に付けてみたのですがやっぱりだめみたいですね。 それともなにか間違っているのでしょうか。

TransFreeBSDさんのコメント
CSSのセレクタでいう所の"span.strong1"相当だと以下です。 >|vb| 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」かが決まります。

hokuto0127さんのコメント
有難うございます!ちょっと一時期パソコンが出来ない環境でして、遅れてすみません。

2 ● ken3memo

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で処理する時の参考となれば幸いです。

VBSでテスト


VBS IE操作 テスト .getElementsByTagName("span")を使用 - YouTube
D

ken3memoさんのコメント
[http://q.hatena.ne.jp/1335028581:title:bookmark] http://q.hatena.ne.jp/1335028581 を 見ると...
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ