none
WebBrowserにて、コンボボックスの要素を選択するには RRS feed

  • 質問

  • コンボボックスのHTMLは、下記の通りだった場合の「リンク集」を設定したい。

    <select name="plugin_id">
    <option value="44">ファン</option>
    <option value="1">ブログタイトル</option>
    <option value="48">血液型ランキング</option>
    <option value="49">星座ランキング</option>
    <option value="23">ダイエットグラフ</option>
    <option value="69">facebookコメント</option>
    <option value="12">プロフィール</option>
    <option value="13">リンク集</option>
    </select>

    試してみたコードは、次の通り。

    WebBrowser1.Document.GetElementById("plugin_id").SetAttribute("Value", "13")

    何度か繰り返して動作確認をしていると、何故か「<option value="44">ファン</option>」を選択していることがある。

    描画速度が関係しているかと思い、waitなどを挿入したりしましたが改善しませんでした。

    何かいい改善策があったら、ご教示ください。

    よろしくお願いします。

    2013年2月6日 7:26

回答

  • > 下記の通りだった場合の「リンク集」を設定したい。

    何をしたいのか質問からはよく分かりませんが、とにかく "設定" する HtmlElement 要素を取得しないと始まりません。

    まず、<select name="plugin_id"> で、plugin_id は id ではなく name なので GetElementById("plugin_id") では何も取得できないと思いますがいかがですか。

    <select id="plugin_id"> とするなどして取得できたとしても、それは select 要素なので、SetAttribute("Value", "13") ではselect 要素の value 属性に "13" が設定されるはずです。それはやりたいこととは違いますよね。

    <option value="13">リンク集</option> の value を設定したいのであれば select 要素の子要素である option 要素で innerText が "リンク集" のものを探して、それに設定しないとダメだと思います。

     

    • 回答としてマーク taokato 2013年2月7日 4:53
    2013年2月6日 12:20

すべての返信

  • どのようなタイミングで"リンク集"を選択されているのでしょうか? LoadCompleted イベントハンドラ内でしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年2月6日 7:44
    モデレータ
  • > 下記の通りだった場合の「リンク集」を設定したい。

    何をしたいのか質問からはよく分かりませんが、とにかく "設定" する HtmlElement 要素を取得しないと始まりません。

    まず、<select name="plugin_id"> で、plugin_id は id ではなく name なので GetElementById("plugin_id") では何も取得できないと思いますがいかがですか。

    <select id="plugin_id"> とするなどして取得できたとしても、それは select 要素なので、SetAttribute("Value", "13") ではselect 要素の value 属性に "13" が設定されるはずです。それはやりたいこととは違いますよね。

    <option value="13">リンク集</option> の value を設定したいのであれば select 要素の子要素である option 要素で innerText が "リンク集" のものを探して、それに設定しないとダメだと思います。

     

    • 回答としてマーク taokato 2013年2月7日 4:53
    2013年2月6日 12:20
  • ご回答、ありがとうございます。

    実験をした結果、"SelectedIndex"を使った方が有効とわかりました。

    以下、動いたコードを転記します。

    WebBrowser1.Document.All("plugin_id").SetAttribute("SelectedIndex", "19")
    
            Debug.Print("ComboBox の値 : " & WebBrowser1.Document.All("plugin_id").GetAttribute("value"))
    
            Debug.Print("PASS_3")
            ' ComboBox の値が、「リンク集」にならなかった場合の処理
            Do Until (WebBrowser1.Document.All("plugin_id").GetAttribute("value") = "13")
                Debug.Print(WebBrowser1.Document.All("plugin_id").GetAttribute("value"))
                WebBrowser1.Document.All("plugin_id").SetAttribute("SelectedIndex", "19")
    
                '描画待ち
                Call WaitCompleted()
                System.Threading.Thread.Sleep(1000)     'wait = 1[s]
    
            Loop

          

    2013年2月7日 4:58