none
webBrowser から情報を読み出す方法について RRS feed

  • 質問

  • みなさま、こんにちわ!

    いつもお世話になります。
    早速ですが、質問をさせてください。


    Formに置かれた webBrowser に表示された内容を

    HtmlDocument htmlDoc = webBrowser.Document; で取得し、
    タグを使い下記の方法で欲しい内容を取得しています。

    htmlDoc.GetElementsByTagName("A")

    ここまでは、旨く行っているのですが、「あいうえお」に続く、
    「かきくけこ」以降の情報を取得する方法が分かりません。

    どの様にすれば宜しいのでしょうか。

    ご教授くださいますよう、よろしくお願い致します。

     

    対象としている htmlDoc は、次のようなものです。

    (省略)

                <TD class=ct></td>
                <TD class=ct><A href="./abcdefg"><IMG src="http://www.xyz.jpg" width=15 height=15 border=0></A></td>

       </tr><tr bgColor=#ffffff>
                <TD class=ct160><A href="./abcdefg">あいうえお</A></td>
                <TD class=ct120>かきくけこ</td>
                <TD class=ct120>さしすせそ</td>
                <TD class=ct120>たちつてと</td>
                <TD class=ct160></td>
                <TD class=ct></td>
                <TD class=ct><A href="./abcdefg"><IMG src="http://www.xyz.jpg" width=15 height=15 border=0></A></td>

       </tr><tr bgColor=#ffffff>
                <TD class=ct160><A href="./abcdefg">ABCDE</A></td>

    (以下省略)

    2011年9月29日 7:19

回答

  • 何が欲しいのか今ひとつ明確に読み取れないですが……。

    td 要素の中にあるテキストデータが欲しいのなら、GetElementsByTagName("td") で手に入れた HtmlElement それぞれの InnerText プロパティを見るとかどうでしょう。

    // その場合、たとえば <td>a<img src="***">b</td> だと InnerText は ab を返します。

    2011年9月29日 8:09
  • 以下辺りが参考になると思います。

    HTMLソースの解析
    http://social.msdn.microsoft.com/Forums/ja/csharpexpressja/thread/2fe4ba74-2ac4-4718-84b2-56570f4db0f3

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年9月29日 13:49
    モデレータ
  • 他の方も書いていますが、何をしたいのかを「結果」ではなくて「要求」として明確にしないと適切な回答は得られないです。

    単純に「かきくけこ」を探すなら、それこそ htmlDoc.InnerHtml.IndexOf("かきくけこ") でよいわけですし、提示されている内容にしても htmlDoc.GetElementsByTagName("A") は "あいうえお" を探すコードではなくて、<A> タグを探すコードです。この時点で、「<A>というタグを探す」という実装と「あいうえおがうまく手に入る」の間には、井上さんだけが知っている秘密の要求があるはずです。

    たとえば、「3番目の A タグ」という機械的な方法で「あいうえお」を探しているのかもしれませんし、CSS クラスで設定している ct160 というのが、「タイトル」のような情報であるため、class 属性をチェックしているのかもしれません。

    ↑のような想像をして、「セルに 概要=ct160, 明細=ct120 という class 属性がついたテーブルの各行から、概要に対応する明細が取得したい」という要求になれば、そういった内容の DOM 操作について誰かが教えてくれるでしょう。(そこそこ簡単ですが、効率とか考えないなら一回XMLにしちゃってLinqって手も...)

     

    2011年9月30日 3:52

すべての返信

  • 何が欲しいのか今ひとつ明確に読み取れないですが……。

    td 要素の中にあるテキストデータが欲しいのなら、GetElementsByTagName("td") で手に入れた HtmlElement それぞれの InnerText プロパティを見るとかどうでしょう。

    // その場合、たとえば <td>a<img src="***">b</td> だと InnerText は ab を返します。

    2011年9月29日 8:09
  • 以下辺りが参考になると思います。

    HTMLソースの解析
    http://social.msdn.microsoft.com/Forums/ja/csharpexpressja/thread/2fe4ba74-2ac4-4718-84b2-56570f4db0f3

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年9月29日 13:49
    モデレータ
  • 他の方も書いていますが、何をしたいのかを「結果」ではなくて「要求」として明確にしないと適切な回答は得られないです。

    単純に「かきくけこ」を探すなら、それこそ htmlDoc.InnerHtml.IndexOf("かきくけこ") でよいわけですし、提示されている内容にしても htmlDoc.GetElementsByTagName("A") は "あいうえお" を探すコードではなくて、<A> タグを探すコードです。この時点で、「<A>というタグを探す」という実装と「あいうえおがうまく手に入る」の間には、井上さんだけが知っている秘密の要求があるはずです。

    たとえば、「3番目の A タグ」という機械的な方法で「あいうえお」を探しているのかもしれませんし、CSS クラスで設定している ct160 というのが、「タイトル」のような情報であるため、class 属性をチェックしているのかもしれません。

    ↑のような想像をして、「セルに 概要=ct160, 明細=ct120 という class 属性がついたテーブルの各行から、概要に対応する明細が取得したい」という要求になれば、そういった内容の DOM 操作について誰かが教えてくれるでしょう。(そこそこ簡単ですが、効率とか考えないなら一回XMLにしちゃってLinqって手も...)

     

    2011年9月30日 3:52
  • お世話になります。

    皆さん、色々とアドバイスを頂いているのに、ちょっと他の事に手を取られてて
    黙りを決め込む事となってしまい、申し訳ありませんでした。

    また、曖昧な書き方で何がやりたいのか悩ませてしまいすみませんでした。

    旨く書けませんが、もう一度整理してみます。

    次のような構造になっているケースで

    <TD ・・・ <A *****   >あいうえお(大項目)</A></td>
    <TD ・・・          かきくけこ(小項目)</td>
    <TD ・・・          さしすせそ(小項目)</td>
    <TD ・・・          たちつてと(小項目)</td>

    <TD ・・・ <A +++++   >ABCDE(大項目)</A></td>
    <TD ・・・          FGHIJ(小項目)</td>
    <TD ・・・          KLMNO(小項目)</td>
    <TD ・・・          PQRST(小項目)</td>


    以下、同じパターンの繰り返し(大項目はユニークです)


    htmlDoc.GetElementsByTagName("A")の機能とキーワード【*****】で
    あいうえお(大項目)は取り出せるのですが、それに続く(属する)小項目を旨く
    取り出す方法が分かりません。

    現状では、あいうえお(大項目)を取り出した後、文字列操作により目的の小項目を
    取得する事で、何とか目的を果たしている状況です。

    HTMLを初めて扱い、十分な理解がないままでの質問で、大変失礼しました。

     

    今回過去レスも教えて頂き、色々と参考になりました。
    Takaoka 様からも、調べ物をするためのヒントを頂きました。

    おかげさまで、どの辺りから手を付けたら(勉強すれば)良いのか、少し見えてきました。

    もう少し調べてみながら、分からない事がハッキリした段階で、改めて質問をさせて
    頂こうかと考えています。

    そんな事で、ひとまずこのスレッドはクローズさせて頂きます。

    もなさん、有難うございました。
    今後とも、どうぞよろしくお願い致します。

    2011年10月10日 6:16