WebBrowserでフレーム内のボタンをクリックするには?

解決


MAKOTO  2003-09-27 02:36:07  No: 79578

またフレーム内の処理についてなのですがよろしくお願いいたします。
普通にフレームのないページであれば、
Set objDoc = objForm.WBMain.Document
objDoc.Forms(0).submit
でクリックできたのですが、フレーム内のボタンをクリックする方法が
わからず試行錯誤してたのですがうまくいかないので
お教えください。お願いします。


klds  2003-09-27 03:28:43  No: 79579

> objDoc.Forms(0).submit

objDoc.Frames(0).Forms(0).submit
という感じになるのでは?


魔界の仮面弁士  2003-09-27 07:56:01  No: 79580

[MAKOTOさん]
> objDoc.Forms(0).submit
これは「ボタンのクリック」ではなく、「フォームデータの送信」です。

「objButton.click」と「objForm.submit」の違いに付いては、
下記の過去ログの最後の方で、少し解説しています。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200309/03090009.txt

[kldsさん]
>> objDoc.Forms(0).submit
> objDoc.Frames(0).Forms(0).submit
submitメソッドで行うなら、
 objDoc.frames(0).document.forms(0).submit
あたりで。


AMKOTO  2003-09-27 22:40:12  No: 79581

kldsさん、魔界の仮面弁士さんありがとうございます。
説明不足の部分がありました。
上下にわかれたフレームの下部分に
<input type="submit" name="test1" value="テスト1">
<input type="submit" name="test2" value="テスト2">
<input type="submit" name="test3" value="テスト3">
のようにNameかValueを指定してボタンを押したいのですが
その方法もお教えください。
お手数ですがよろしくお願いいたします。


MAKOTO  2003-09-28 20:43:34  No: 79582

もうひとつ知りたいのですが、
そのボタンがあるかどうかというのも
わかるりませんか?
例えば上に書いた例で言えば、
テスト1のボタンがあればテスト1のボタンを押す、
なければボタンを押す処理を飛ばすという風な感じのもの
があれば知りたいのですがお願いします。


魔界の仮面弁士  2003-09-28 21:22:31  No: 79583

> のようにNameかValueを指定してボタンを押したいのですが

その場合はやはり、「formエレメントのsubmitメソッド」ではなく、
「inputエレメントのclickメソッド」で対応する必要があるでしょう。
手順に付いては、先に紹介したURLの方で述べていますので、そちらを参照してください。

> テスト1のボタンがあればテスト1のボタンを押す、
その場合、あるHTML要素が『テスト1のボタン』と見なされる条件は何ですか?

id="test1"という属性を持った要素を探すなら、documentオブジェクトの
getElementByIdメソッドが使えます。これがNothingを返せば、その要素は
存在しないという事になります。つまり、
  Set objButton = objDocument.getElementById("test1")
  If objButton Is Nothing Then
     MsgBox "ボタンが見つかりません。"
  Else
     objButton.click
  End If
のようなイメージになります。

あるいは、name="test1という属性をもったコントロールを探すなら、
formエレメントのelementsコレクション、もしくは
documentオブジェクトのgetElementsByNameメソッドが使えます。

前者(elements)の場合は、先のgetElementByIdと同じようなイメージです。
つまり、それがNothingを返せば、その要素は存在しないという事に
なりますので、コーディングとしては、
  Set objControl = objForm.elements("test1")
  If objControl Is Nothing Then
     MsgBox "ボタンが見つかりません。"
  Else
     objControl.click
  End If
のようなイメージとなるでしょう。

また、後者(getElementsByName)の場合は、このメソッドが返す
コレクションのlengthプロパティを調べればOKです。
例えば、
  Set objElementCollection = objDocument.getElementsByName("test1")
  If objElementCollection.length = 0 Then
     MsgBox "ボタンが見つかりません。"
  Else
     objElementCollection(0).click
  End If
ですね。


MAKOTO  2003-09-29 19:33:33  No: 79584

魔界の仮面弁士さんから教えていただいたのを
少し変えて、

    Set objDoc = WebBrowser1.Document
    Set objTag = objDoc.Frames.Item(1).Document
    Set objText = objTag.getElementsByName(pstrName)

    If objText.Length = 0 Then
       MsgBox "ボタンが見つかりません。"
    Else
       objText(0).Click
    End If

としたらフレーム内のボタンを押せるようになりました。
みなさまありがとうございました。
今後ともよろしくお願いいたします。


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

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






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