サイトによって、Navigateが、連続してできない
未読分:19件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#19 2021年1月15日(金)00時41分 From: 通りすがり | 返事 削除 変更 |
VBAでIE制御にあたり、本サイトを参照させていただいております。 昨今、IEの使用をやめるよう推奨されていますよね? いずれはIEもなくなり、EdgeやChromeへの変更を余儀なくされるかと思います・・。 VBAでIE操作と同様のことをやるにはこのままではダメなようなので、新たなやり方を探さなくてはならないようですが、どうも標準ではできないようです(さらっとネットで検索した處、Web Driverをインストールするとか、Seleniumをインストールするとか・・)。 會社のPCだと、自分で好き勝手にインストールができない環境にあるので、どうしたものかと・・。 皆様はどのようにお考えでしょうか? 追伸 厳密にいうとIEの話ではないので、不適切な投稿でしたら削除ください。 |
Message#18 2015年7月30日(木)22時23分 From: C++COM | 返事 削除 変更 |
私も同じような現象にハマっていたので非常に助かりました。 ここをヒントにブラウザ周りの設定を見直しIEのインターネットオプションで対象のページを信頼済みにするとうまく動作してくれました。 |
Message#17 2015年7月8日(水)17時26分 From: 名無し | 返事 削除 変更 |
その後、ネットでいろいろ調べたら、Win7でIE11の動作は不安定だという記事を見ました。 そこで、IE10に戻したところ、なんと問題なく動いてしまいました。 いったい今までの苦労はなんだったのか、少々腹立たしさを覚えます。 念のため、「新しいバージョンを自動的にインストールする」のチェックは外しました。 なお、この問題にお付き合いくださった方には感謝いたします。 ありがとうございました。問題解決です。 名無しのメッセージ(#16)への返事 > VBAマスターのメッセージ(#15)への返事 > > 返信ありがとうございます。 > > 変な状態で残る、という事象は重々承知しています。 > ですから、パソコンを再起動させてやっていますが、それでもだめなのです。 > > 同じ環境で上手くいかなかった人もおり、もうさっぱりお手上げ状態です。 > > > 私も確認したところ正常に動作しますね。 > > > > > '終了処理 > > > ieObj.Quit 'Webを閉じる > > > > > > Set ieObj = Nothing > > > > この処理をした後にタスクマネージャーに「iexplore.exe」が残っていませんか? > > IEをQuit メソッドで閉じる場合、画面上でIEが閉じても裏で残っている場合があります。 > > こちらが残った状態でIEオブジェクトを作成するとIEが表示されずに処理が進むという > > 現象もあります。 > > > > navigateメソッドでエラーが起こるときにタスクマネージャーに「iexplore.exe」が > > 残っていないか、またはnavigateメソッドの前後に停止処理を入れてみてはいかがでしょうか? |
Message#16 2015年4月28日(火)09時57分 From: 名無し | 返事 削除 変更 |
VBAマスターのメッセージ(#15)への返事 返信ありがとうございます。 変な状態で残る、という事象は重々承知しています。 ですから、パソコンを再起動させてやっていますが、それでもだめなのです。 同じ環境で上手くいかなかった人もおり、もうさっぱりお手上げ状態です。 > 私も確認したところ正常に動作しますね。 > > > '終了処理 > > ieObj.Quit 'Webを閉じる > > > > Set ieObj = Nothing > > この処理をした後にタスクマネージャーに「iexplore.exe」が残っていませんか? > IEをQuit メソッドで閉じる場合、画面上でIEが閉じても裏で残っている場合があります。 > こちらが残った状態でIEオブジェクトを作成するとIEが表示されずに処理が進むという > 現象もあります。 > > navigateメソッドでエラーが起こるときにタスクマネージャーに「iexplore.exe」が > 残っていないか、またはnavigateメソッドの前後に停止処理を入れてみてはいかがでしょうか? |
Message#15 2015年4月22日(水)18時10分 From: VBAマスター | 返事 削除 変更 |
私も確認したところ正常に動作しますね。 > '終了処理 > ieObj.Quit 'Webを閉じる > > Set ieObj = Nothing この処理をした後にタスクマネージャーに「iexplore.exe」が残っていませんか? IEをQuit メソッドで閉じる場合、画面上でIEが閉じても裏で残っている場合があります。 こちらが残った状態でIEオブジェクトを作成するとIEが表示されずに処理が進むという 現象もあります。 navigateメソッドでエラーが起こるときにタスクマネージャーに「iexplore.exe」が 残っていないか、またはnavigateメソッドの前後に停止処理を入れてみてはいかがでしょうか? |
Message#14 2015年4月22日(水)05時42分 From: 名無し | 返事 削除 変更 |
確認していただき、ありがとうございます。Excelは32ビット版です。 正常動作しましたか…。 実は、他のサイトでも同じような質問をし、そちらでも正常に動作したというコメントをいただいたのです。 インターネットオプションのセキュリティで、「保護モードを有効にする」のチェックを外してみたらどうか、というご意見もあり、やってみたのですがダメ。 うまく動いた人の環境と、どこかが、何かが違うのでしょうね。 それが分からずに、もんもんとしている状態です。 ただ、ジャッカルさんも動いたということが分かったので、プログラム自体は問題ないのだろうということだけは分かりました。 これから、環境(特にIEの設定周り)をもう一度調べてみますが、もう少しここは閉じないで起きます。 何か、参考になる情報がありましたら、いただけると幸いです。 ジャッカルのメッセージ(#13)への返事 > コピペして処理してみたけど、正常に処理されるもようです。 > > 一応5回連続F5で処理しても正常に処理されたので、問題ないように思えるがどうだろう。 > > PC環境も同じ環境で試してみたが、こちらも正常。 > > http://www.vba-ie.net/ie/subroutine2.html > > ↑ページにこんな文章見つけたが、もしかして64bit利用しているとか? > > これは、office2010で64bit(ビット)版を利用している場合、API宣言の記述方法が異なるためです。使用するPC環境に合わせた記述方法でも問題ありませんが、汎用性を持たせるために条件分岐させています。こちらの問題については「32ビット版のOffice2010プログラムでVBAマクロを編集すると・・・」に詳しく解説されていますので、一度確認してください。 |
Message#13 2015年4月21日(火)23時05分 From: ジャッカル | 返事 削除 変更 |
コピペして処理してみたけど、正常に処理されるもようです。 一応5回連続F5で処理しても正常に処理されたので、問題ないように思えるがどうだろう。 PC環境も同じ環境で試してみたが、こちらも正常。 http://www.vba-ie.net/ie/subroutine2.html ↑ページにこんな文章見つけたが、もしかして64bit利用しているとか? これは、office2010で64bit(ビット)版を利用している場合、API宣言の記述方法が異なるためです。使用するPC環境に合わせた記述方法でも問題ありませんが、汎用性を持たせるために条件分岐させています。こちらの問題については「32ビット版のOffice2010プログラムでVBAマクロを編集すると・・・」に詳しく解説されていますので、一度確認してください。 |
Message#12 2015年4月20日(月)08時20分 From: 名無し | 返事 削除 変更 |
ジャッカルのメッセージ(#11)への返事 > 部分的にどこが悪いといわれても分かりづらいので実装しているコードを公開したらどうですか? > > こちらで確認しようがない。。。 そうですね、今試しているコードは以下のようになります。 Microsoft Internet Controls Microsoft HTML Object Library は参照設定しています。なので、CreateObjectは要りません。 (CreateObjectをやっても同じでした) F8(ステップ実行)では走ります。 F5(実行)では、1回目は動きますが、2回目でダメになります。 ---以下、メインプロシージャ Sub PER_Jg() 'Yahooファイナンスサイトを開いておく Dim ieObj As InternetExplorer Const DH As String = "A4" '銘柄コード先頭 Const YFUrl As String = "http://finance.yahoo.co.jp/" 'YahooファイナンスURL Set ieObj = New InternetExplorer 'Yahooファイナンスサイトの表示 Call ieView(ieObj, YFUrl) Dim dr As Range '銘柄コード Set dr = Range(DH) Do Until dr.Value = "" 'キーワードを入力してSerchボタンを押す、という処理にした場合 With ieObj.document 'キーワードを入力する .getElementsByName("query")(0).Value = dr.Value 'Serchボタンをクリックする .forms(1).submit End With Call ieCheck(ieObj) '検索結果からデータを取得(未作成) Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5) Set dr = dr.Offset(1) Loop '終了処理 ieObj.Quit 'Webを閉じる Set ieObj = Nothing End Sub ---以下サブプロシージャ3本 Sub ieView(objIE As InternetExplorer, _ urlName As String, _ Optional viewFlg As Boolean = True) 'IE(InternetExplorer)を表示・非表示 objIE.Visible = viewFlg '指定したURLのページを表示する objIE.navigate urlName 'IE(InternetExplorer)が完全表示されるまで待機 Call ieCheck(objIE) End Sub Sub ieNavi(objIE As InternetExplorer, _ urlName As String) '指定したURLをIE(InternetExplorer)で表示 objIE.navigate urlName 'IE(InternetExplorer)が完全表示されるまで待機 Call ieCheck(objIE) End Sub Sub ieCheck(objIE As InternetExplorer) Const toc = 20 'ループ監視時間 Const slt = 1 'スリープタイム(ms) Dim timeOut As Date With objIE '完全にページが表示されるまで待機する timeOut = Now + TimeSerial(0, 0, toc) Do While .Busy = True Or .readyState <> 4 DoEvents Sleep slt If Now > timeOut Then .Refresh timeOut = Now + TimeSerial(0, 0, toc) End If Loop '完全にページが読み込まれるまで待機する timeOut = Now + TimeSerial(0, 0, toc) Do While .document.readyState <> "complete" DoEvents Sleep slt If Now > timeOut Then .Refresh timeOut = Now + TimeSerial(0, 0, toc) End If Loop End With End Sub 以上です。 動作環境は Win7 Excel2010 IE バージョン11 です。 よろしくお願いします。 |
Message#11 2015年4月20日(月)01時06分 From: ジャッカル | 返事 削除 変更 |
部分的にどこが悪いといわれても分かりづらいので実装しているコードを公開したらどうですか? こちらで確認しようがない。。。 |
Message#10 2015年4月17日(金)22時29分 From: 名無し | 返事 削除 変更 |
名無しのメッセージ(#9)への返事 追加ですが、ステップ実行だとうまく動くのです。 一体全体、何をどうすれば連続して動くのでしょうか????? > VBAマスターのメッセージ(#8)への返事 > > 検索画面のinputにデータを入れ、submitしてやってみましたが、この方法でもダメでした。 > > Refreshを強制的に抜けてやってみても、ダメです。 > > 何か、ドツボにはまってしまった気がします。 > > > > JavaScriptが関係している場合はやっかいであることは確かですね。 > > > > Navigateで直接URLにアクセスするよりはクリック処理でそのページを開くと > > うまくいくかもしれません。 > > > > サイトによってはパラメーターを保持していることもあるので、直接アクセスすると > > 表示エラーになることもあります。 |
Message#9 2015年4月17日(金)22時18分 From: 名無し | 返事 削除 変更 |
VBAマスターのメッセージ(#8)への返事 検索画面のinputにデータを入れ、submitしてやってみましたが、この方法でもダメでした。 Refreshを強制的に抜けてやってみても、ダメです。 何か、ドツボにはまってしまった気がします。 > JavaScriptが関係している場合はやっかいであることは確かですね。 > > Navigateで直接URLにアクセスするよりはクリック処理でそのページを開くと > うまくいくかもしれません。 > > サイトによってはパラメーターを保持していることもあるので、直接アクセスすると > 表示エラーになることもあります。 |
Message#8 2015年4月16日(木)09時08分 From: VBAマスター | 返事 削除 変更 |
JavaScriptが関係している場合はやっかいであることは確かですね。 Navigateで直接URLにアクセスするよりはクリック処理でそのページを開くと うまくいくかもしれません。 サイトによってはパラメーターを保持していることもあるので、直接アクセスすると 表示エラーになることもあります。 |
Message#7 2015年4月16日(木)08時28分 From: 名無し | 返事 削除 変更 |
VBAマスターのメッセージ(#6)への返事 コメントありがとうございます。 やってみましたが、現象は変わりませんでした。 やはりIEとサイトの関係があるのでしょうか。 解せないのは、なぜ最初のNavigateで一旦止めると、あとは続けてうまく動くのか、ということです。 うまくいくサイトと、そうでないサイトとの違いは、JavaScriptが関係しているような気がするのですが、もしそうだとしても、上記の「なぜ?」というところに戻ってしまいます。 最初の表示の後に、MsgBoxで止めるとうまくいくので、最悪はこの方法で連続して処理させようと思いますが、それにしてもすっきりしません。 > 提示しているサイトが表示されないページなのでなんともいえませんが、表示しようとしているサイトのプログラムやレンタルサーバーの性能によっては、完全表示されずにループすることは多々あります。 > > ネットショップで特に多いですが、画像がやたら多いので完全読み込みに他サイトと比べて結構遅いです。 > そういうサイトに限ってオープンソースで処理能力の遅いEC-CUBEなどを利用していることが多いですが、このような場合はクライアントPCの処理能力が高くてもサーバー側の処理が遅いと完全に読み込めないこともあります。 > > こちら以下のページでもサンプルコードは完全ではないと明言しています。 > > http://www.vba-ie.net/ie/navigate.html > > こちらのサイトでは、ループ回避するためにreflashで再読み込みを行っていますが、別の方法としてgotoで強制的に抜ける方法も紹介しているので、こちらを試してみたらどうですか? > > 個人的にデータを抜くときは数秒待っとけばほしいデータは先に読み込んでいるので、完全に読み込まれていなくても結構エラーを表示させずに処理してくれます。 |
Message#6 2015年4月15日(水)19時10分 From: VBAマスター | 返事 削除 変更 |
提示しているサイトが表示されないページなのでなんともいえませんが、表示しようとしているサイトのプログラムやレンタルサーバーの性能によっては、完全表示されずにループすることは多々あります。 ネットショップで特に多いですが、画像がやたら多いので完全読み込みに他サイトと比べて結構遅いです。 そういうサイトに限ってオープンソースで処理能力の遅いEC-CUBEなどを利用していることが多いですが、このような場合はクライアントPCの処理能力が高くてもサーバー側の処理が遅いと完全に読み込めないこともあります。 こちら以下のページでもサンプルコードは完全ではないと明言しています。 http://www.vba-ie.net/ie/navigate.html こちらのサイトでは、ループ回避するためにreflashで再読み込みを行っていますが、別の方法としてgotoで強制的に抜ける方法も紹介しているので、こちらを試してみたらどうですか? 個人的にデータを抜くときは数秒待っとけばほしいデータは先に読み込んでいるので、完全に読み込まれていなくても結構エラーを表示させずに処理してくれます。 |
Message#5 2015年4月15日(水)17時25分 From: 名無し | 返事 削除 変更 |
VBAマスターのメッセージ(#3)への返事 確かに、一回ごとにQuitや Set ieobj=Nothing を入れても、途中でエラーになるとカスが残ることはありますが、いかんせん連続してNavigateできないので、これが解決しないことにはどうしようもありません。 完了待ちをクラスモジュールでイベント処理にする方法もあるようですが、こちらをご存知でしたら、やり方を教えていただけないでしょうか。 > オブジェクトの設定&開放を連続しておこなうとIEのカスが裏でのこって不具合を起こすのでなるべく、quitを利用せずに連続した処理をした方がいいでしょうね。 > > 先に回答している方もいますが、IE操作は表示待ちは重要ポイントですので、一度見直してみるとよいと思います。 |
Message#4 2015年4月15日(水)17時19分 From: 名無し | 返事 削除 変更 |
ジャッカルのメッセージ(#2)への返事 初めての質問投稿のため、不慣れな点はご容赦を。 > 一般的には下の処理をいれて読み込みを待つけどこれでも不十分なときがある。 > > Do While objIE.Busy = True Or objIE.ReadyState <> 4 > DoEvents > Loop もともと、このサイトのサブプロシージャ(ieViewやienavi)を使ってやってみたのですが、それでも同じなのです。で、それらのプロシージャに関係あるかと思い、直接5秒待ちを入れても同じだったという意味です。5秒を極端に長くしても、現象は変わらないのです。 > > ようは処理速度のパソコンを使えばエラーが少なくなるけどねー Intel(R) Core(TM) i5-3337U 1.80GHz で4GBのRAMを積んでいて、他のアプリケーションを動かしていないので、処理速度的には問題ないと思っていますが…。 |
Message#3 2015年4月14日(火)17時22分 From: VBAマスター | 返事 削除 変更 |
オブジェクトの設定&開放を連続しておこなうとIEのカスが裏でのこって不具合を起こすのでなるべく、quitを利用せずに連続した処理をした方がいいでしょうね。 先に回答している方もいますが、IE操作は表示待ちは重要ポイントですので、一度見直してみるとよいと思います。 |
Message#2 2015年4月14日(火)08時53分 From: ジャッカル | 返事 削除 変更 |
これ単純に処理5秒間とめているだけだからブラウザの読み込みがぜんぜん完了していないのに、処理をしようとしてるからうまく表示されてないんだよ。 一般的には下の処理をいれて読み込みを待つけどこれでも不十分なときがある。 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop ようは処理速度のパソコンを使えばエラーが少なくなるけどねー |
Message#1 2015年4月13日(月)12時21分 From: 名無しさん | 返事 削除 変更 |
VBAのIE制御サイトは、大変勉強になりました。 いろいろやってみて、どうしてもわからないことがあり、質問します。 サイトによって、Navigateが、連続してできないことがあります。 以下は、そのコードです。 With ieObj .Visible = True .navigate "http://quote.tse.or.jp/tse_n/quote.cgiF=listing%2FJDetail1&MKTN=T&QCODE=6753" Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5) .navigate "http://www.jpx.co.jp/" Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5) .navigate "http://quote.tse.or.jp/tse_n/quote.cgiF=listing%2FJDetail1&MKTN=T&QCODE=3382" Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5) End With もともとは、ieView や ieNavi を使ってやっていたのですが、どうしても変な現象 がでるため上のコードで試しました。 現象は、次の通りです。 F5キーで実行すると、3つ目の.navigateでオートメーションエラーになったり、表 示せずに終わったりします。 そのあと、.Quitをやっているのですが、表示しないで終わってもブラウザが閉じな いのです。 ところが、最初の.navigateの直後でブレークポイントを設定し、F5キーで走らせる と、正常に走って、正常に終了します。 他のパソコンでは動く人もいるので、IEの設定か何かなのでしょうか? 一回ごとにQuitしてNavigateするなら動くのですが、Quitせずに連続してスマートに Navigateしたいのです。 サイトによってはうまく動くものもありますので、何が原因なのか、行き詰っていま す。 動作環境を以下になります。 Windows7 IE11 Excel2010 よろしくお願いします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降