IE8でCreateObject("IE.app")に不具合 [システムトレード]
昨日改定いたしましたデータ取得更新マクロですが、どうもIE8ではエラーが出てしまうようです。と言うよりも、改定前のバージョンにおいても、恐らくIE8では動作しないものと思われます。
今日は、昨日ご紹介した運用後資産推移の評価結果を考察する予定でしたが、上記問題への対応に追われたため、予定を変更させていただきます。
具体的には、IE8上でマクロを実行すると対象サイトが開き、「実行時エラー'-2147417848(80010108)': オートメーションエラーです。起動されたオブジェクトはクライアントから切断されました。」というメッセージが表示されます。
もちろん、IE7以前の環境では、このような問題は生じません。そもそも、CreateObjectでインターネットエクスプローラを呼び出した後、.VisibleをFalseに設定してWebページが表示されないようにしているにも関わらず、それが表示されてしまうこと自体が問題です。
いろいろと調べてみましたが、信頼済みサイトへの登録は行われていますし、一時的に信頼性を下げてみても駄目でした。
ActiveXコントロールなども設定を変更したりしてみたのですが、やはり駄目です。
サイトをいろいろ見て回ったりもしたのですが、残念ながら解決策はおろか、そのような不具合報告すらありませんでした。
ひょっとしたら、私のパソコン環境だけの問題なのかもしれません。
まあ幸いなことに、普段株価データを更新しているパソコンはXp+IE6なので、システム運用上の問題は生じていません。
しかし、今後、IE8が世の中の主流になってくるだろうことを考えると、このまま放置しておくわけにもいきません。
そこで、"InternetExplorer.application"(IE.app)の使用は諦め、"MSXML2.XMLHTTP"を使用する検討を始めました。
合わせて、正規表現の利用も考えています。
IE.appの時は、取得したオブジェクトから、Tag情報をはじめとするさまざまなデータを引き出すことができたのですが、MSXML2.XMLHTTPの場合は、WebページのHTMLファイルを読み込むくらいで、残念ながらそれほど極め細やかな情報を得ることができません。
そのため、取得したHTMLファイルから目的の情報を効率的に抽出するために、正規表現が必須となります。
正規表現を用いることで、IE.appを使用した場合と同様の処理が可能となります。
まだ検討段階に過ぎないのですが、今日の時点でとりあえず、当日データの取得と時系列データ1ページ分の取得まではできました。
処理速度は非常に高速です。IE.appの時はインターネットエクスプローラを呼び出すのに結構時間が掛かる場合があったのですが、ほとんど瞬間的に取り込みが完了します。
また、正規表現で取り込む内容をよく吟味することで、非常に簡単なアルゴリズムにすることができました。さらに、取得データを一旦配列に入れることで、シートへの書き出しを高速化しました。
全てが完成するまでにはまだ時間が掛かりますが、とりあえず、最大の山場は脱したように思います。
ただ、この方法を用いるにあたり、一つ大きな問題があることが分かりました。それは、取得したデータがキャッシュされてしまい、マクロを開いた状態のままだと、再度マクロを実行しても結果が更新されないというものです。
これもいろいろと調べてみたのですが、例えば一定時間毎に継続して同一銘柄のデータを取り込むような場合は、インターネット一時ファイルを削除するなどの対策が必要なようです。
ただ、その方法は私にとってかなり難しく、私はまだ内容をよく理解できていません。
もっとも、エクセルを再起動すれば、新規データが取得できるらしいことが分かってきましたので、その辺りに簡単な解決策があるのかもしれません。
いずれにしましても、大きな山場は越えたとはいえ、まだまだ問題は山積みです。
取扱説明書の更新やシステムの改定、合成システムの検討など、多くの課題を抱えた中で、また一つ仕事が増えてしまいました。
まあ、頑張ってやっていくしかありません。
今日は、昨日ご紹介した運用後資産推移の評価結果を考察する予定でしたが、上記問題への対応に追われたため、予定を変更させていただきます。
具体的には、IE8上でマクロを実行すると対象サイトが開き、「実行時エラー'-2147417848(80010108)': オートメーションエラーです。起動されたオブジェクトはクライアントから切断されました。」というメッセージが表示されます。
もちろん、IE7以前の環境では、このような問題は生じません。そもそも、CreateObjectでインターネットエクスプローラを呼び出した後、.VisibleをFalseに設定してWebページが表示されないようにしているにも関わらず、それが表示されてしまうこと自体が問題です。
いろいろと調べてみましたが、信頼済みサイトへの登録は行われていますし、一時的に信頼性を下げてみても駄目でした。
ActiveXコントロールなども設定を変更したりしてみたのですが、やはり駄目です。
サイトをいろいろ見て回ったりもしたのですが、残念ながら解決策はおろか、そのような不具合報告すらありませんでした。
ひょっとしたら、私のパソコン環境だけの問題なのかもしれません。
まあ幸いなことに、普段株価データを更新しているパソコンはXp+IE6なので、システム運用上の問題は生じていません。
しかし、今後、IE8が世の中の主流になってくるだろうことを考えると、このまま放置しておくわけにもいきません。
そこで、"InternetExplorer.application"(IE.app)の使用は諦め、"MSXML2.XMLHTTP"を使用する検討を始めました。
合わせて、正規表現の利用も考えています。
IE.appの時は、取得したオブジェクトから、Tag情報をはじめとするさまざまなデータを引き出すことができたのですが、MSXML2.XMLHTTPの場合は、WebページのHTMLファイルを読み込むくらいで、残念ながらそれほど極め細やかな情報を得ることができません。
そのため、取得したHTMLファイルから目的の情報を効率的に抽出するために、正規表現が必須となります。
正規表現を用いることで、IE.appを使用した場合と同様の処理が可能となります。
まだ検討段階に過ぎないのですが、今日の時点でとりあえず、当日データの取得と時系列データ1ページ分の取得まではできました。
処理速度は非常に高速です。IE.appの時はインターネットエクスプローラを呼び出すのに結構時間が掛かる場合があったのですが、ほとんど瞬間的に取り込みが完了します。
また、正規表現で取り込む内容をよく吟味することで、非常に簡単なアルゴリズムにすることができました。さらに、取得データを一旦配列に入れることで、シートへの書き出しを高速化しました。
全てが完成するまでにはまだ時間が掛かりますが、とりあえず、最大の山場は脱したように思います。
ただ、この方法を用いるにあたり、一つ大きな問題があることが分かりました。それは、取得したデータがキャッシュされてしまい、マクロを開いた状態のままだと、再度マクロを実行しても結果が更新されないというものです。
これもいろいろと調べてみたのですが、例えば一定時間毎に継続して同一銘柄のデータを取り込むような場合は、インターネット一時ファイルを削除するなどの対策が必要なようです。
ただ、その方法は私にとってかなり難しく、私はまだ内容をよく理解できていません。
もっとも、エクセルを再起動すれば、新規データが取得できるらしいことが分かってきましたので、その辺りに簡単な解決策があるのかもしれません。
いずれにしましても、大きな山場は越えたとはいえ、まだまだ問題は山積みです。
取扱説明書の更新やシステムの改定、合成システムの検討など、多くの課題を抱えた中で、また一つ仕事が増えてしまいました。
まあ、頑張ってやっていくしかありません。
インターネットエクスプローラ8(IE8)において、データ取得更新マクロがうまく動作しない問題について検討した結果、IE7の場合と同様、以下のヤフーファイナンスのサイトを「信頼済みサイト」に登録していただくとともに、「このゾーンのセキュリティのレベル」にある「保護モードを有効にする」にチェックを入れてOKボタンを押すことで、正常に動作することが判明しました。
http://stocks.finance.yahoo.co.jp/
http://table.yahoo.co.jp/
そのように設定した状態で、データ取得更新マクロを実行すれば、データの取得更新が正常に行われます。
なお、信頼済みサイトへの登録方法につきましては、研究所サイトのコラム・解説ページにおける2008年7月14日の解説「データ取得更新マクロの改定と不具合対策」をご参照ください。
この度は私の検討不足によりお騒がせしてしまい、申し訳ありませんでした。
なお、今後"MSXML2.XMLHTTP"の使用を検討する件につきましては、タイムアウト処理との兼ね合いなどを考慮して、判断していくことにいたしました。
by Kフロー (2009-06-28 17:49)
同現象に嵌りましたが同手順で解決しました。大変参考になりました。
by NO NAME (2011-11-14 14:00)
NO NAMEさん、こんにちは。
ご参考いただき、何よりです。
by Kフロー (2011-11-14 18:37)