サイトのフォーム送信の自動化について
未読分:2件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#2 2014年9月30日(火)20時41分 From: 管理人 | 返事 削除 変更 |
まず、対象のフォームが異なる処理をしていますね。 > objIE.Document.Forms(0).Item("id").Value = "テスト" こちらはフォーム0番目のテキストボックスに”テスト”を入力しているのに対して > objIE.Document.Forms(1).submit こちらはフォーム1番目のsubmitボタンをクリック処理を入れています。 まずは、ここが間違いです。 通常のフォーム処理でのサンプルを記載しますので、そちらを参考にIE制御を試みてください。 【フォーム処理】 Sub sample() Dim objIE As InternetExplorer 'IEでフォームページを表示 Call ieView(objIE, "該当するURL") Call formText(objIE, "id", "テスト") Call frameTagClick(objIE, "input", "submit") End Sub 【IE制御のサブルーチン】 Sub ieView(objIE As InternetExplorer, _ urlName As String, _ Optional viewFlg As Boolean = True, _ Optional ieTop As Integer = 0, _ Optional ieLeft As Integer = 0, _ Optional ieWidth As Integer = 600, _ Optional ieHeight As Integer = 800) 'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.Application") 'IEを表示・非表示 objIE.Visible = viewFlg objIE.Top = ieTop 'Y位置 objIE.Left = ieLeft 'X位置 objIE.Width = ieWidth '幅 objIE.Height = ieHeight '高さ '指定したURLのページを表示する objIE.Navigate urlName 'IEが完全表示されるまで待機 Call ieCheck(objIE) End Sub Sub ieCheck(objIE As InternetExplorer) Dim timeOut As Date timeOut = Now + TimeSerial(0, 0, 10) Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Sleep 100 If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 10) End If Loop timeOut = Now + TimeSerial(0, 0, 10) Do Until objIE.document.ReadyState = "complete" DoEvents Sleep 100 If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 10) End If Loop End Sub Sub frameFormText(objIE As InternetExplorer, _ nameValue As String, _ tagValue As String) 'フレームのオブジェクトを取得する Set objFrame = objIE.document.frames For i = 0 To objFrame.Length - 1 'フレームドキュメントのオブジェクトを取得する Set objFrameDoc = objFrame(i).document 'フレーム内のテキストボックス・パスワードボックスに値を入力 For Each objTag In objFrameDoc.getElementsByTagName("input") If objTag.name = nameValue Then objTag.Value = tagValue GoTo label01 End If Next 'フレームテキストエリアに値を入力 For Each objTag In objFrameDoc.getElementsByTagName("textarea") If objTag.name = nameValue Then objTag.Value = tagValue GoTo label01 End If Next Next label01: End Sub Sub frameTagClick(objIE As InternetExplorer, _ tagName As String, _ tagStr As String) 'フレームのオブジェクトを取得する Set objFrame = objIE.document.frames For i = 0 To objFrame.Length - 1 'フレームドキュメントのオブジェクトを取得する Set objFrameDoc = objFrame(i).document For Each objTag In objFrameDoc.getElementsByTagName(tagName) If InStr(objTag.outerHTML, tagStr) > 0 Then objTag.Click Call ieCheck(objIE) GoTo label01 End If Next Next label01: End Sub |
Message#1 2014年9月29日(月)16時56分 From: VBA新人 | 返事 削除 変更 |
VBAでIEを操作する方法について色々と調べているのですが、フォームの操作について分からなかったので教えてください。 サイトにformのテキストボックスとsubmitの送信ボタンがあります。 テキストボックスは「テスト」という文字列をいれ、submitをクリックする操作を書いたのですが、うまくいきません。 以下がプログラムの抜粋になります。 objIE.Document.Forms(0).Item("id").Value = "テスト" objIE.Document.Forms(1).submit テスト自体は入力されていて、うまくいっています。 ですが、submitだけうまくクリックされないようなのです。 どのように書いたらよろしいでしょうか? |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降