WebBrowserで文字をClickしたい


GoIII  2006-04-02 18:09:53  No: 94880

WebBrowserで文字をClickしたいのですが通常ですとINPUTタグがありと思うのですが見当たりません、下記にその部分のHTMLを書きますのでご指導いただけませんかよろしくお願いします。

HTML-------
&nbsp;&nbsp;<SPAN class=lk id=ods>最後 ≫</SPAN></SPAN>
----------

この"最後"の文字をClickすると最後のページに移動します、このページにある全てのINPUTタグはオブジェクトに入れてClickさせてみたのですが該当するものがありませんでした、


VB梅  2006-04-02 19:07:04  No: 94881

添付のHTMLでは答えることができないと思われます。
http://www.tohoho-web.com/html/span.htm
にあるようにSPANは「意味を持たないタグ」ですから

JavaScript で制御されているのかと思われます。


GoIII  2006-04-03 09:28:32  No: 94882

早速の御回答ありがとうございます。VB梅さんの言うとおりですよね。これだけの情報から回答を導き出すのは難しいと思います、ただ該当するタグがこれしかなかったので書いてみました、確かにこのホームページはJavaScriptで作成されています、私はClickできるところには必ずINPUTタグがあるものだと思っていました、JavaScriptを使うとINPUTタグを使わなくてもClickさせる事ができるのででしょうか?、それともしこれをClickしたいとしたらどうしたら良いのでしょうか?
もし参考になるホームページなどご存知でしたらご紹介いただけませんかよろしくお願いします。


LESIA  2006-04-03 18:18:15  No: 94883

タグにclassやidが設定されているので、onclickのところに、クリックされた
のを識別するのに、このタグのclassやidの名前が使われているところが
ありませんか?

例えば
<SCRIPT LANGUAGE="VBScript">
Function document_onclick()
    If window.event.srcElement.className = "lk" Then

    End If
End Function
</SCRIPT>
とか

あるいは
<SCRIPT LANGUAGE="VBScript">
Function document_onclick()
    If window.event.srcElement.id = "ods" Then

    End If
End Function
</SCRIPT>
とか


魔界の仮面弁士  2006-04-03 19:02:36  No: 94884

> WebBrowserで文字をClickしたいのですが
質問時には、開発環境を明記してください。

VB2005で登場したマネージWebBrowser と、それ以前のバージョンでの
ActiveX版WebBrowser とでは、細かい部分でプロパティ定義が異なりますし、
IEコンポーネントのバージョンによっても、若干の差が生じますので。
(たとえば、IE3 と IE4以降では、click可能な要素の数さえ異なります)

> 文字をClickしたいのですが
クリックする事で、何をしたいのかがさっぱり…。(^^;

最初に提示された物にしても、<SPAN> が 1個で </SPAN> が 2個なので、
HTML としては、文法的に異質に見えます。他にも何かタグが無いでしょうか?

> 私はClickできるところには必ずINPUTタグがあるものだと思っていました
<INPUT> だろうと <A> だろうと、<LABEL>だろうと、<SPAN> だろうと、
クリックする事自体は可能ですよね。
(手動にクリックするにしても、プログラムでclickするにしても)

で、クリック時にスクリプトが動作するという形になっているのだとしたら、
多くの場合は、onclick 属性で指定されたスクリプトがあると思います。

たとえば、
  <body onclick="alert(1)">
   <p onclick="alert(2)">
    <span onclick="alert(3)">クリック</span>
   </p>
  </body>
という構造のHTMLがあった場合、ここには INPUT は一つもありませんが、
「クリック」と表示される部分を押せば、onclickで指定されたスクリプトに
従って、「3」「2」「1」がそれぞれ表示されるはずです。
「クリック」と書かれた部分以外をクリックすれば、「2」「1」もしくは
「1」とだけ表示されるでしょう。

これらの場合は、たとえば document.body.click などのようにして、
<body onclick="">で指定された「alert(1)」を動作させる事ができます。

ただし、クリックできるようになっているからといって、そのHTML中に
必ずしも onclick 属性の指定があるとは限りません。

たとえば下記では、onclick の指定がありませんが、ビヘイビアで生成された
タブ部分をクリックすると、画面が切り替わるようになっています。
http://www.ocv.ne.jp/~oratorio/junk/Sample/08/tabSample.html

あるいは、JScriptの関数オブジェクトや、VBScriptのGetRef関数を用いて、
<script type="text/jscript">document.body.onclick = function(){alert('TEST')}</script>
などのように、実行時にスクリプトでイベントを割り当てる場合もありますね。

他にも、Flash などを用いてクリック判定が行われている場合もあるでしょう。

> JavaScriptを使うとINPUTタグを使わなくてもClickさせる事ができるのででしょうか?
ターゲットが WebBrowser なので、JavaScript というよりは JScript ですが、
clickメソッドを呼び出すだけなら、JScript でも、VBScript でも、
VB6 でも、VB.NET 2002/2003 でも VB2005 でも可能でしょう。

なお、clickメソッドを持っている HTML要素の一覧については、
下記の [Applies To] を参照してください。
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/click.asp

ただし、イベント制御が外部コンポーネントによって処理されている場合には、
click メソッドでは制御できない場合もあります。その場合は、mouse_event API あるいは
SendInput API でマウス操作をエミュレートするか、IAccessible インターフェイスの
accDoDefaultAction メソッドでの操作ができないかを検討してみてください。


GoIII  2006-04-03 21:02:01  No: 94885

LESIAさん、魔界の仮面弁士さん  適切なアドバイスありがとうございます。
>質問時には、開発環境を明記してください。
VB6,IE6
書き忘れてすいませんでした。

>> 文字をClickしたいのですが
>クリックする事で、何をしたいのかがさっぱり…。(^^;
クリックする事によって最後のページに移動したいのです。

>たとえば下記では、onclick の指定がありませんが、ビヘイビアで生成された
>タブ部分をクリックすると、画面が切り替わるようになっています。
>http://www.ocv.ne.jp/~oratorio/junk/Sample/08/tabSample.html
サンプルまで作っていただきありがとうございます、
この文字(最後)に関連するところにはOnClick,Clickなどはなく、魔界の仮面弁士さんが作ってもらったビヘイビアに似ております、これはWebBrowerからClickする事はできるのでしょうか、もしできるのでしたらご指導いただけませんか、よろしくお願いします。


魔界の仮面弁士  2006-04-03 22:52:17  No: 94886

> この文字(最後)に関連するところにはOnClick,Clickなどはなく
その上位要素(body や document)に対して、イベントの割り当てが行われていませんか? 

極端な例で言えば、そのHTML中にて
  <body onload="document.onclick = function(){location.href='http://www.google.co.jp/'}">
のような定義がなされていれば、ページ内のどこをクリックしても、
google の検索サイトにジャンプしますよね。

> 魔界の仮面弁士さんが作ってもらったビヘイビアに似ております
もしもビヘイビアであったとしても、それだけでは情報不足です。
それがスタイルシート指定のエレメントビヘイビアなのか、それとも
独自タグとして実装されたカスタムビヘイビアなのか、あるいは、
ActiveXによるバイナリビヘイビアなのかによって、その実装は
全く異なりますから。

> これはWebBrowerからClickする事はできるのでしょうか
もしビヘイビアだとしても、それを外部から制御できるかは、そのbehaviorを
実装しているコンポーネント(*.htc とか *.wsc とか)の内容を見てみないと判断できません。

たとえば、求める機能が、イベント等やメソッド等として公開されていれば、
それを呼び出せば済むでしょう。

ですが、メソッド等として公開されていなかった時に、それを外部から呼び出せるか
どうかは、それが、viewlink で隠蔽されているどうかによって異なります。
(もしも隠蔽されていなければ、behavior内部の HTML 要素を取得し、
 その click メソッドを呼び出すことで対応できるかもしれません)

> もしできるのでしたらご指導いただけませんか
といわれても、現状では根本となる仕様が殆どわかりませんので、
何ともアドバイスのしようがありません。(behaviorかどうかさえ不明ですし)

まずは御自身で、該当要素(またはその上位要素)の click メソッドを
呼び出してみて、期待する動作になるかどうかをチェックしてみてください。


魔界の仮面弁士  2006-04-03 23:10:01  No: 94887

# ん…何か説明がおかしいな。訂正。

> それがスタイルシート指定のエレメントビヘイビアなのか、
> それとも独自タグとして実装されたカスタムビヘイビアなのか、

失礼、独自タグの方がエレメント ビヘイビアです。
http://msdn.microsoft.com/library/ja/jpdnie55/htm/ie.asp

先の私のタブページなサンプルは、エレメントビヘイビアによる実装です。

一方、スタイルシート等にてアタッチされる方は、DHTMLビヘイビアなどと呼ばれます。
http://www.microsoft.com/japan/msdn/workshop/author/behaviors/howto/creating.asp

たとえば、下記のテーブルは、DHTMLビヘイビアによるサンプルです。
ここには、onclick="" や onmouseover="" などのイベント関連の属性指定も
<script> 要素もありませんが、マウス位置の色付け、列クリックによるソート、
列のドラッグ入れ替えなどが、実装されています。
http://msdn.microsoft.com/library/en-us/dndude/html/Qual.asp

# ちなみに、上記のサンプルの場合、
#   Dim ColumnIndex As Integer
#   ColumnIndex = 3
#   WebBrowser1.Document.getElementById("MyTable").rows(0).cells(ColumnIndex).Click
# などのようにして、4列目(Engine列)をソートできたりします。


魔界の仮面弁士  2006-04-03 23:40:09  No: 94888

> まずは御自身で、該当要素(またはその上位要素)の click メソッドを
> 呼び出してみて、期待する動作になるかどうかをチェックしてみてください。

一応、元の HTML から予想されるコードを書いておきます。

Set X = WebBrowser1.Document,getElementById("ods")
MsgBox X.outerHTML
X.Click

で、上記でも駄目なようであれば、あとは HTML側の詳しい構造を
見てみないと、これ以上の具体的な回答をする事はできないです。


GoIII  2006-04-04 01:28:46  No: 94889

魔界の仮面弁士さん丁寧な御回答ありがとうございます。
>Set X = WebBrowser1.Document,getElementById("ods")
>MsgBox X.outerHTML
>X.Click
これをやってみました、MsgBox("<SPAN class=lk id=ods>最後 ≫</SPAN>")が出てきて確かにClickはできたのですが最後のページには移動できませんでした。

>google の検索サイトにジャンプしますよね。
びっくりしました、実はこのサイトはGoogleのGmailです、以前はInfoSeekのWEBメールを使っていたのですがGmailがあまりにも良くできているのでこちらに乗り換えましたが、一つだけ欠点がありフィルターが20個しか作成できないのです、容量は2Gと大きくいくらでもメールは受信できるのですがだんだんスパムメールなどがたまってきてほったらかしておいたら数百ページになってしまい手動で削除するには耐えられなく、プログラムを作ろうと思ったのです。GMailは紹介でしか入れないのでフリーメールとしては使っている人が少ないような気がします。
魔界の仮面弁士さんはGmail持っていらっしゃいますか?
たいへんずうずうしいお願いだとは十分承知していますが、もしGmailをお持ちでしたら覗いてみていただけないでしょうか?、とてもこの狭いスペースにHTMLを掲載できません、もしお持ちでなければ紹介メール送りますが。
ご存知かもしれませんがGmailはOption機能が充実していてsample@gmail.comというアドレスを持っていると(samp.l.e@gmail.com)  (sample+koukoku@gmail.com)など@マークより左の部分に"." "+"が使えフィルターで整理できます。
なにか本題と関係ない事を書いてしまい申し訳ございませんでした、もう少し自分で努力してみます。


魔界の仮面弁士  2006-04-04 11:59:39  No: 94890

> だんだんスパムメールなどがたまってきてほったらかしておいたら
私の場合は、標準の迷惑フィルタ機能だけで捌ききれているので、
フィルタ機能を使った事が無いです。
# スターとラベルだけで十分に処理できているので。

> もしGmailをお持ちでしたら覗いてみていただけないでしょうか?
え? (^_^;)
あんな、frameset やら iframe やらがゴチャゴチャしたページを…ですか? 

そもそも、Gmail って ajax ベースで構築されている上に、難読化まで施されているので、
正直なところ、あの HTML 構造を、まともに解析する気にはなれないです。

まぁ、それでも一応、ざっと覗いて見た感じでは:

1) メイン画面のドキュメントは、(当方では)下記で取得できた。
  Set Doc = WebBrowser1.document.frames.main.document.frames(1).document

2) クリックに反応しているわけではなく、マウス押下に反応しているらしい。
→だから、Clickメソッドでは処理できない。

3) WebBrowser1.Document.frames.main.Document.onmousedown に、
  function(c){return tq(y(a),c,b)} が割り当てられている。
→予想では、ここでマウス押下の振り分けなどを行っている。

4) スクリプトの実態は、
  WebBrowser1.Document.frames.js.Document.documentElement.outerHTML
  に書かれているらしい。
→難読化されているので、読む気になれず。

という所で、面倒になって解析中止。(^_^;)

もし、onmousedown に割り当てられた function(c) の引数の意味がわかれば、

  Dim EventObject As Object
  Set EventObject = WebBrowser1.Document.frames.main.Document.onmousedown
  CallByName E, "", VbMethod, 引数cに渡すべき物

のようにして呼び出せるのかも知れませんが、よくわかりませんでした。

もっとも、見当違いかも知れませんけどね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加