none
webbrowserのボタンクリック方法について RRS feed

  • 質問

  • <div class="editorBtnArea">
    <a href="#" class="editorPostButton" data-action="postBtn"><span class="editorPostButtonSub">投稿</span></a>
    </div>

    上記タグをクリックする処理を作りたいのですがidやnameが無いためgetElementsで取得できないでいます。

    このような場合はどのような解決法がありますでしょうか。

    よろしくお願いします。

    2012年6月20日 13:39

回答

  • 未検証ですが・・・

    webBrowser1.Document.GetElementsByTagName("a")

    で a 要素の HtmlElementCollection を取得して、その中
    で属性が一致するものの HtmlElement を探し、それに
    InvokeMember("click") としたらどうなりますか?

    • 回答としてマーク ぱん屋 2012年6月21日 4:58
    2012年6月20日 14:12
  • a タグに id や name を追加することはできないんですか?

    できるなら、追加したうえでそれを元に a タグを検索するのがもっとも単純で確実です。

    できない場合

    • class=editorBtnArea な div タグを検索
    • ↑ div タグ配下の a タグを検索

    という手順を踏むことになります。

    ですが、HTML 文書中に「div タグ配下の a タグ」が複数存在する可能性がありますし、その div タグ配下に複数の a タグが存在する可能性もあります。

    そういった可能性を考慮しなければならない場合、さらに条件を絞り込めるような文書構造を探さなくてはなりません。

    • 回答としてマーク ぱん屋 2012年6月21日 4:58
    2012年6月20日 22:54
    モデレータ

すべての返信

  • 未検証ですが・・・

    webBrowser1.Document.GetElementsByTagName("a")

    で a 要素の HtmlElementCollection を取得して、その中
    で属性が一致するものの HtmlElement を探し、それに
    InvokeMember("click") としたらどうなりますか?

    • 回答としてマーク ぱん屋 2012年6月21日 4:58
    2012年6月20日 14:12
  • a タグに id や name を追加することはできないんですか?

    できるなら、追加したうえでそれを元に a タグを検索するのがもっとも単純で確実です。

    できない場合

    • class=editorBtnArea な div タグを検索
    • ↑ div タグ配下の a タグを検索

    という手順を踏むことになります。

    ですが、HTML 文書中に「div タグ配下の a タグ」が複数存在する可能性がありますし、その div タグ配下に複数の a タグが存在する可能性もあります。

    そういった可能性を考慮しなければならない場合、さらに条件を絞り込めるような文書構造を探さなくてはなりません。

    • 回答としてマーク ぱん屋 2012年6月21日 4:58
    2012年6月20日 22:54
    モデレータ
  • そうそうの回答ありがとうございます。教えていただいたことをもとに下記のようにコーディングしたところ想定通りクリックすることができました。お陰様で一歩進むことができました。本当にありがとうございます。

            private void button1_Click(object sender, EventArgs e)
            {
                int i = 0;

                HtmlElement doc = webBrowser1.Document.GetElementById("aEditor");
                HtmlElementCollection btn1 = doc.GetElementsByTagName("a");
                foreach (HtmlElement elem in btn1)
                {
                    i++;
                    if (i == 4)
                    {
                        elem.InvokeMember("click");
                    }
                }
            }

    2012年6月21日 4:56
  • そうそうの回答ありがとうございます。教えていただいたことをもとに段階ごとに検索を絞っていきましたところうまくいきました。本当にありがとうございます。

    • 回答としてマーク ぱん屋 2012年6月21日 4:58
    • 回答としてマークされていない ぱん屋 2012年6月21日 4:58
    2012年6月21日 4:57