tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: javascriptで生成されるリストをwebbrowserから操作できない
投稿日: 2015/07/01(Wed) 19:00
投稿者魔界の仮面弁士
> WebBrowserのバージョンはIE11を使用しています。

既定では IE7 モードのはずですが、意図的に IE11 モードに変更して利用されているのですね。
エミュレーションモードは 11001 でしょうか、11000 でしょうか?
https://msdn.microsoft.com/en-us/library/ee330730%28vs.85%29.aspx#browser_emulation



> 大分類を選択しても中分類が表示されません。
select 要素の onchange は、「利用者が操作して選択肢が変更された時」に発生する
イベントだからです。プログラムから変更した場合には、onchange は発生しません。

https://msdn.microsoft.com/en-us/library/ms536912.aspx
》 To invoke this event, do one of the following:
》 ・Choose a different option in a select object using mouse or keyboard navigation.
》 ・Alter text in the text area and then navigate out of the object.



> どなたかお知恵をお貸し頂けると幸いです。
たとえばこんな感じでしょうか。タグの選択方法はかなり端折っているので、適宜修正してください。


''' <summary>
''' ラジオボタン2を選択
''' </summary>
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
 Dim doc = Me.WebBrowser1.Document

 Dim radio2 = doc.GetElementsByTagName("INPUT")(1)
 radio2.SetAttribute("checked", "checked")
 radio2.InvokeMember("click")    'クリックイベントを誘発
End Sub

''' <summary>
''' 大分類を選択
''' </summary>
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button2.Click
 Dim doc = Me.WebBrowser1.Document

 Dim select1 = doc.GetElementsByTagName("SELECT")(0)

 'デフォルトの動作モードであれば、この方法で動作しますが、
 '今回は IE11 モードとのことなので、この方法では動作しません
 'Dim listItem = select1.Children.OfType(Of HtmlElement).FirstOrDefault(
 '   Function(opt) opt.GetAttribute("value") = "2078297513")
 'select1.SetAttribute("selectedIndex", listItem.GetAttribute("index"))
 ''listItem.SetAttribute("selected", "selected")
 'select1.RaiseEvent("onchange")
 
 'IE11 モードの場合は、ユーザー操作をエミュレートすることで代用して下さい
 select1.Focus()
 SendKeys.Send(Space(1))
End Sub

-----

IE7 モードであれば、<OPTION> の selected で選択しても、<SELECT> の selectedIndex で選択しても
.RaiseEvent("onchange") が使えるのですが、IE8 モードで .RaiseEvent("onchange") する場合は
<SELECT> の selectedIndex を使って選択する必要があります。

IE9〜IE11 モードの場合は、そもそも .RaiseEvent("onchange") すら使えないため、
キーボード操作もしくはマウス操作をエミュレートする必要があります。


なお、現在のブラウザバージョンを確認する場合は
http://www.useragentstring.com/
を表示させてみると良いでしょう。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。