C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: webbrowser で クリックしたい


(過去ログ 151 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■87828 / inTopicNo.1)  webbrowser で クリックしたい
  
□投稿者/ ヒデキ (1回)-(2018/07/03(Tue) 16:37:46)

分類:[VB.NET/VB2005 以降] 

2018/07/03(Tue) 16:43:11 編集(投稿者)
2018/07/03(Tue) 16:42:34 編集(投稿者)
<pre><pre>2018/07/03(Tue) 16:41:33 編集(投稿者)

<td class="bl_solid bb_solid shift_line fr" data-staff="0" data-name="テスト" data-s="1300" data-index="0" data-date_key="2018/07/01" data-datetime="2018/07/01 1300">&nbsp;</td>

というhtmlをクリックしたいのですがうまくいかないのでお教えいただけましたら幸いです。

For Each elem As HtmlElement In Webbrowser.Document.GetElementsByTagName("td")
If elem.GetAttribute("data-name") = "テスト" Then
If elem.GetAttribute("data-datetime") = "2018/07/01 1300" Then
If elem.InnerHtml = "&nbsp;" Then
'elem.SetAttribute("onclick", "true")
elem.InvokeMember("click")
System.Windows.Forms.Application.DoEvents()
End If
End If
End If
next

上記のコードでは elem.InvokeMember("click")が実行されるとこまでは確認できておりますが
実際にはクリックされないようです。

他の方法でクリックできるようであれば、お教えいただけましたら幸いです。
どうぞよろしくお願いいたします。</pre></pre>
引用返信 編集キー/
■87832 / inTopicNo.2)  Re[1]: webbrowser で クリックしたい
□投稿者/ WebSurfer (1539回)-(2018/07/04(Wed) 10:08:52)
No87828 (ヒデキ さん) に返信

> 上記のコードでは elem.InvokeMember("click")が実行されるとこまでは確認できておりますが



> 実際にはクリックされないようです。

はそれぞれどのように確認したのでしょうか?

矛盾していることを言われているような気がしますが・・・

引用返信 編集キー/
■87833 / inTopicNo.3)  Re[2]: webbrowser で クリックしたい
□投稿者/ ヒデキ (2回)-(2018/07/04(Wed) 11:42:47)
2018/07/04(Wed) 11:43:41 編集(投稿者)
2018/07/04(Wed) 11:43:28 編集(投稿者)

No87832 (WebSurfer さん) に返信
> ■No87828 (ヒデキ さん) に返信
>
>>上記のコードでは elem.InvokeMember("click")が実行されるとこまでは確認できておりますが
>
> と
>
>>実際にはクリックされないようです。
>
> はそれぞれどのように確認したのでしょうか?
>
> 矛盾していることを言われているような気がしますが・・・
>

実際のサイトに接続して ステップ実行したことで elem.InvokeMember("click") まで通ったので
「実行された」のだと、いう判断をしました。
ところが その後 マウスでクリックした時と同じ動作が発生しないので
「実際にはクリックされない」と判断しました。

引用返信 編集キー/
■87834 / inTopicNo.4)  Re[2]: webbrowser で クリックしたい
□投稿者/ ヒデキ (3回)-(2018/07/04(Wed) 11:43:47)
No87832 (WebSurfer さん) に返信
> ■No87828 (ヒデキ さん) に返信
>
>>上記のコードでは elem.InvokeMember("click")が実行されるとこまでは確認できておりますが
>
> と
>
>>実際にはクリックされないようです。
>
> はそれぞれどのように確認したのでしょうか?
>
> 矛盾していることを言われているような気がしますが・・・
>

実際のサイトに接続して ステップ実行したことで elem.InvokeMember("click") まで通ったので
「実行された」のだと、いう判断をしました。
ところが その後 マウスでクリックしたサイト同じ動作が発生しないので
「実際にはクリックされない」と判断しました。

引用返信 編集キー/
■87835 / inTopicNo.5)  Re[3]: webbrowser で クリックしたい
□投稿者/ Hongliang (656回)-(2018/07/04(Wed) 12:36:24)
<html><body><table><tr><td onclick="alert('ok')"></td></tr></table></body></html>
というごく簡単なHTMLを使って、
For Each elem As HtmlElement In Webbrowser.Document.GetElementsByTagName("td")
  elem.InvokeMember("click")
Next
を実行すれば問題なくアラートが表示されたので、この部分の問題はないはずです。
多分、td要素のクリックではない別の契機でご所望の動作が開始されているのでしょう。
// それがどんなのかはそのページ次第なので具体的なことは言えません。

引用返信 編集キー/
■87836 / inTopicNo.6)  Re[3]: webbrowser で クリックしたい
□投稿者/ WebSurfer (1540回)-(2018/07/04(Wed) 13:09:04)
No87833 (ヒデキ さん) に返信

Web のページを含めてすべて自分の環境でサンプルを作って試してみましたが、期待通り InvokeMember("click") 
で click イベントは発火できます。

html ソースは以下の通りです。検証のため、問題の td 要素には静的に onclick 属性に alert('clicked!') を
追加しています。

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>

</title></head>
<body>
    <form method="post" action="./0043-WebBrowserTest.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="8yr9nqcOXCnSmq9UzVtqEv91qCjtgI1E2BTopkzgep+8R1YRO2y041GPHpvJzGHELRFB83dM3UYYikJ4TxKOxSBHw0vTnoNSr9inraRqCL0=" />
</div>

<div class="aspNetHidden">

	<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="59F85CC1" />
</div>
        <h1>0043-WebBrowserTest.aspx</h1>
        <table>
            <tr>
                <th>Colums-1</th>
                <th>Column-2</th>
                <th>Colums-3</th>
            </tr>
            <tr>
                <td>line-1 / Column-1</td>
                <td class="bl_solid bb_solid shift_line fr" data-staff="0" 
                    data-name="テスト" data-s="1300" data-index="0" 
                    data-date_key="2018/07/01" data-datetime="2018/07/01 1300" 
                    onclick="alert('clicked!')">&nbsp;</td>
                <td>line-1 / Column-3</td>
            </tr>
            <tr>
                <td>line-2 / Column-1</td>
                <td>line-2 / Column-2</td>
                <td>line-2 / Column-3</td>
            </tr>
        </table>
    </form>
</body>
</html>

上記を WebBrowser から呼び出し、DocumentCompleted イベントのハンドラで、質問者さんと同じコードを走らせると
期待通り alert は表示されます。

つまり、質問者さんの WebBrowser のコードで、問題の td 要素を指す HtmlElement は取得でき、InvokeMember("click") 
でその td 要素の click イベントは発火できているということになります。

質問者さんが対象としている実際のページの td 要素には静的には onclick 属性は設定してないようですが、であれば、
あるタイミングで動的に click イベントのリスナをアタッチしているので、質問者さんの WebBrowser のコードで
InvokeMember("click") とした時点ではまだリスナがアタッチされてないのではないかと思います。(思うだけで確証
はありませんが)

引用返信 編集キー/
■87840 / inTopicNo.7)  Re[4]: webbrowser で クリックしたい
□投稿者/ ヒデキ (4回)-(2018/07/04(Wed) 14:05:18)
> 上記を WebBrowser から呼び出し、DocumentCompleted イベントのハンドラで、質問者さんと同じコードを走らせると
> 期待通り alert は表示されます。
>
> つまり、質問者さんの WebBrowser のコードで、問題の td 要素を指す HtmlElement は取得でき、InvokeMember("click")
> でその td 要素の click イベントは発火できているということになります。
>
> 質問者さんが対象としている実際のページの td 要素には静的には onclick 属性は設定してないようですが、であれば、
> あるタイミングで動的に click イベントのリスナをアタッチしているので、質問者さんの WebBrowser のコードで
> InvokeMember("click") とした時点ではまだリスナがアタッチされてないのではないかと思います。(思うだけで確証
> はありませんが)


そういうふうに確認することで
検証ができるのですね。

ものすごく勉強になりました。

仰るところを 調べていこうと思います。

今回は大変お手数をおかけくださいまして
感謝しております。
大変ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -