表示上ページが移動しているにも関わらず、移動後のページエレメントが読めない 削除
Message#1 2017年5月30日(火)13時57分 From: 初心者 |
IE制御の初心者ですが、下記の通り基本的なところで困っています。 @ログインページからID、パスワードを入力し、ログインボタンをクリックして、”管理一覧ページ”へ移動 Aその後、”管理一覧ページ”にあるリンクURLをクリックし、”情報管理ページ”に移動 させたく、この”VBAのIE制御”で教えてもらったコードで以下の通り記述しています。 ところが、”管理一覧ページ”に表示が移動しているにも関わらず、”情報管理ページ”へのリンクURLを見つけられない。ステップモードで”管理一覧ページ”に表示が変わったあとにステップで進めたが、見つけられなかった。そのため、ここで全エレメントを読んでみたところ、表示が”管理一覧ページ”になっているにもかかわらず、エレメント自体は移動前の”ログインページ”のものだった。 ページ移動前に読み込んでいるのかとも疑ったが、 Call tagClickのサブルーチン内にWebページ完全読込待機処理サブルーチン「ieCheck」も入れてあるので、問題ないのではと考えています。 どうすれば移動後のエレメントが読めるのか、アドバイスをお願いします。出来れば修正するコード自体を具体的にお教えいただけると助かります。 よろしくお願いいたします。 ーーーー以下、コードーーーーーー Sub sample() 'メイン処理 Dim objIE As InternetExplorer Dim objLink As Object 'InternetExplorerでログインページを起動 Call ieView(objIE, "http://www.XXXXXXXX") '<---- ログインURL 'ログインIDをテキストボックスに入力 objIE.document.getElementsByName("login_id")(0).Value = "XXXX" '<---- ログインID 'パスワードボックスに値を入力 objIE.document.getElementsByName("login_pw")(0).Value = "XXXX” '<---- パスワード 'ログインボタンを選択、管理一覧ページへ移動 Call tagClick(objIE, "button", "ログイン") For Each objLink In objIE.document.Links If InStr(objLink.outerHTML, "情報管理") > 0 Then objLink.Click Call ieCheck(objIE) Exit For End If Next (このあとの処理省略) ーー以下、サブルーチンーーーーーーーーーーーーー '@指定URLを表示するサブルーチン「ieView」 Sub ieView(objIE As InternetExplorer, _ urlName As String, _ Optional viewFlg As Boolean = True) 'IE(InternetExplorer)のオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.Application") 'IE(InternetExplorer)を表示・非表示 objIE.Visible = viewFlg '指定したURLのページを表示する objIE.navigate urlName 'IEが完全表示されるまで待機 Call ieCheck(objIE) End Sub ーーーーーーーーーーー 'AWebページ完全読込待機処理サブルーチン「ieCheck」 Sub ieCheck(objIE As InternetExplorer) Dim timeOut As Date timeOut = Now + TimeSerial(0, 0, 20) Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 20) End If Loop timeOut = Now + TimeSerial(0, 0, 20) Do While objIE.document.readyState <> "complete" DoEvents If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 20) End If Loop End Sub ーーーーーーーーーーーーー Sub tagClick(objIE As InternetExplorer, _ tagName As String, _ tagStr As String) 'Bボタンクリックするサブルーチン Dim objTag As Object 'タグをクリック For Each objTag In objIE.document.getElementsByTagName(tagName) If InStr(objTag.outerHTML, tagStr) > 0 Then objTag.Click Call ieCheck(objIE) Exit For End If Next End Sub |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。