webbrowserでの自動入力について

タグの編集
投稿者 るい  (社会人) 投稿日時 2016/11/2 17:32:59
webbrowseを使い、ウェブ上のテキストボックスやコンボボックスを操作するプログラムを書いています。
テキストボックスであれば
 Dim Elementst As HtmlElementCollection = Me.WebBrowser1.Document.GetElementsByTagName("input")
        For Each Element As HtmlElement In Elementst
            If Element.GetAttribute("id") = "input_text" Then
               Element.SetAttribute("value", "aaaaaaaaaaaaaaaaaa")   
      ’もしくはElement.InnerText = "aaaaaaaaaaaaaaaaaa"
       Exit For 
            End If
        Next

コンボボックスであれば
Elementst = Me.WebBrowser1.Document.GetElementsByTagName("select")
     For Each Element As HtmlElement In Elementst
            If Element.GetAttribute("id") = "deliveryTerm" Then
           Element.SetAttribute("selectedIndex", "3")
       ’もしくはElement.SetAttribute("value", "3")
                Exit For
            End If
        Next
のような方法を使っています。


どのように表現したらいいかわからないのですが、
実行した際に、見た目上はしっかり反映、入力されているのですが、内部的?には入力されていない状態のままで、「入力されていません」のような状態になります。

例えばSendKeys.Sendを使ってキーボードから入力したようにすれば反映されます。

コードを使って入力や選択をして、なおかつページがそれを認識するようにするにはどのような方法がございますでしょうか?

解りずらい質問で大変申し訳ございませんが、よろしくお願いします。



投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/11/2 18:25:15
可能であれば、サンプルとなりそうな具体的な URL を挙げて頂けると話を進めやすいです。


> 内部的?には入力されていない状態のままで、

恐らくは、onchange などの変更通知イベントが発生していないのだと思います。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=all&namber=33445&type=0&space=0&no=0
投稿者 るい  (社会人) 投稿日時 2016/11/4 15:36:44
魔界の仮面弁士様、

返答ありがとうございます。
そして返事が遅くなり申し訳ございません。

実際のところ、躓いているURLは、ラクマとうフリマサイトの出品画面になります。
ログインが必要な為サンプルURLとしてお伝えできませんでしたので他に同じような動きをするURLを探したのですがみつかりませんでした。

似たような動きとして、

http://rakuma.rakuten.co.jp/search/

こちらの右上にある検索のテキストボックスの挙動なのですが、こちらは、InnerTextでセットすると検索ボタンを押しても何も入力されていない結果が出て、SetAttribute("value", "xxxxx") でセットすると検索文字列として検索できます。

ただ今までもこのようなSetAttributeで解決することは何度かあったのですが、今回はダメでしたので、こちらはサンプルとしては違うかもしれません。

いただいたURLの情報をもとに、IEのバージョンでも試してみましたが特に変化はみうけられませんでした。
なにかお気づきのてんがございましたら、教えていただけると助かります。
よろしくお願いいたします。



投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/11/5 14:05:02
> こちらの右上にある検索のテキストボックスの挙動なのですが、
右上にある
  <input type="text" name="keyword">
のことですね。

> こちらは、InnerTextでセットすると
その場合、
  <input type="text" name="keyword">xxxxx</text>
を想定したコードになります。


> SetAttribute("value", "xxxxx") でセットすると

その場合、
  <input type="text" name="keyword" value="xxxxx">
として扱われます。

そして、 <form> からの submit 処理や JavaScript の .vvalue は、
後者でなければ意味が無いので、その結果は当然ですね。


> 他に同じような動きをするURLを探したのですがみつかりませんでした。

となると、元の URL でどのような動きが起きているのかを、
どうにか頑張ってご自身で調査していただくしか無いですかね。

こちらとしても、『「入力されていません」のような状態になる』というのが
どのような状態であるのか分かりませんので、状況を調べられるのは
るいさん自身しか居ないわけで…。