いやはや参りました~あせる
アメブロの不正アクセスで、1700万アカウント(人って言わないのはもちろんあえて)のうちの約5万アカウントに含まれっちまいました。

ログイン自体が出来なかったので、せっかくマクロのコード整理してアップしたのにご案内もできず。
どーでもいいんですが今ちょうどアメブロの右カラムにあるHOTニュースに、「断捨離しない片づけ方法」って見出しがあって一人でウケました。

さて、ダウンロード&ご報告用に作ったかなり簡易的なサイトがこちらです。
便宜的にサイト名を「ぜにマクロ」としました。
フレーム対応のブラウザでご覧ください。
http://m31.fool.jp/download/


基本的にはタイムリーにお知らせとかするのはこのブログです。

ただコードについてあれこれ話していると、コメント欄がどんどん長くなってしまって読みにくいので、掲示板を用意しました。なんだかエラーが出ちゃってるときとか、対策とかについてまとまったら、ここであらためてお知らせします。双方向です。

とりあえずどっちかを見ておけば大丈夫なようにしようと思ってます。

コード整理と言いながらみなさんから頂いた内容を反映してみました。
こちらでは相変わらずエラーは出てませんが、何かあったら教えてください。

年が明けると決済番号取得できなくなったりすると思うので、そのへんの対策と修正ファイルのアップもしていきます。


--------------------------------------------------------------------

にほんブログ村 為替ブログ 100通貨単位・1000通貨単位へ
にほんブログ村 為替ブログ 100通貨単位・1000通貨単位
ランキングに参加しています。気に入って頂けたらぜひクリックをお願いします。

--------------------------------------------------------------------

前にもちらっと書いたんですが、職業柄、仕事が暇でも常にPCの前でネットもつなぎ放題、というのを利用して、今まさに暇で暇で仕方がないので、勉強がてらVBAのテストをしまくってます。
横浜市のサイトのフレーム使ってるページとかをアクセス先にしてテストとかしてますw
頻繁に見てるのがバレても怒られなさそうなページということで。
2ちゃんとか、ゲームのサイト(任天堂だとか)はアクセス規制がかけられているので見ることができませんが、そういうところにも業務上参考にしたいものがあったりするのになぁということもしばしば。

んで、フレーム表示はもういいとして、リニューアル後の注文画面ていちいち表示が切り替わるのに変に時間かかるじゃないですか。あれをもっとサクッとできねーかな、ってことで、データの送信先に直接注文内容をPOSTするっていうのをやろうとしてました。

わからない方に説明するとしますと…うーん…
たとえば、注文画面で通貨ペア選択したり、レート入力したりして、それを送信しますよね。

これを電報を打ちたいときに例えましょう。

通貨ペア選択したりレート入力したりするのは、こちらが電報を打つ内容、文章を申し込みするのと同じ。
それを印字して、ドラえもんとかくっつけて届けるのが、間に入っているNTT。
このNTTの役割をしてるのが確認ボタンを押したときのシステムの動きです。

私たちには印字したりキティちゃんをくっつけられないので、NTTさんがやってくれてます。
同じように、確認ボタンを押すと、マネパのそのシステムがレートの数字とかをとりまとめてデータを送信してくれます。
(送信した内容は、また確認画面の形になってこちらに返ってきますね)

で、今回はその、印字してミッキーマウスをくっつけるところを自分でやろうというわけです。

自分で手紙を書いてプーさんのぬいぐるみを買ってきて、それに手紙をくっつけて、相手のところに持って行って手渡しする。

つまり、最初からデータをとりまとめた状態にしたものを、直接送りつけてやろうというもの。

ただこれJavascriptの知識がないもんで、いいところまではいけたんですがうまくデータを送れませんでした。マネパのページ自体を自分で作ってればまだしも、必要な情報が揃ってないもので。
あと、やってるうちにちょっと怖いなと思いまして。
IF-DONE注文は普通に入力して確認ボタン押した後のところまでをExcelにやらせようとしてるだけなんですが、これがもしストリーミングとかで、約定レートを勝手に決めて送信とか万が一できちゃったりしたら(私の技術ではできませんが)(できるような杜撰なシステムだったら問題)、完全に不正アクセスですよね。

今のマクロは人間が手でブラウザを操作するのと同じことをやらせてるので問題ないはずですが、そういうデータの送信とか、通常のブラウザ操作では出てこない部分にアクセスするのはグレーかな、と思ってます。(その送信先は注文時にこちらのパソコンから普段アクセスしてるから、手動でアクセスしてダメってことはないけどね)

時間短縮のメリットよりも、法に抵触するリスクを避けることをとりましょう。



***


ところで話は変わりますが、こういうIE操作してどこぞのホームページの中身をどうこうするとかいうときに、みんなイミディエイトとか使ってるんですかね。
Debug.Printみたいな。
いちいちコード書いて、そのサイトの中身を片っ端から調べて何個目のボタンのidが何だとか。

これ、Firefox使ってFireBugっていうアドオン入れたら簡単に調べられます。
最近GoogleがFirefoxのサポートを終了する→いややっぱあと3年延長するとかいって、その筋では話題になってますが、私がFirefoxを使ってるのはこのFireBugのためといっても過言ではない。

とか思ってましたが、実はChromeでもほとんど同じアドオンを使えるってことがわかりました。
んじゃーChromeに慣れておいた方がいいのかな~なんて思ってます。

そもそもFirefoxって何?っていう方は、きっとWindowsを持っていて、最初から入っている青いeマーク=インターネットだと思ってるタイプの方かもしれません。まだまだそういう方も多いと思います。

普段インターネットを見るときに、青いeマーク、IEを使ってる方も多いと思いますが、これはあくまでもインターネットを見るブラウザの一種類でしかありません。ブラウザって何よ?みたいな?


たとえばPCがテレビだとします。画面にいろいろ映せます。

テレビには、SHARPのAQUOSとか東芝のREGZAだとかソニーのBRAVIAだとかがありますね。
これがつまり、AppleのiMacだったり、ソニーのVAIOだったりします。機種ですね。

たとえばドラクエで遊びたいとします。
ドラクエにもいろいろありまして、ファミコンで遊べるもの、プレステで遊べるものなどがあります。

このファミコンやプレステという違いに当たるのが、WindowsとかMacです。
ファミコンがWindows98だとするとスーファミがWindows2000で、NINTENDO64がWindowsXPとか進化していってます。プレステがMacOS9ならば、プレステ3はMacOSX LIONみたいな。

だからAQUOSにプレステを繋いでドラクエ7をやる。

VAIOにWindowsXPを入れてIE8を使う。みたいなことです。
(ちなみにiMacにXP入れるとかもできるんですよ。私はiMacでXP使ってます)

そして、IEがドラクエにあたるのだというならば…
1種類のゲーム機でドラクエやマリオやゼルダが使えるように、IEやFirefoxやSafariやGoogleChromeといったWebブラウザ(インターネットを見るソフト)が使えます。


この説明方法、何年か前にうちの母に使いましたw



Firefoxがプレステ3だとすると、そこにTorneだっけ?トルネをつけたら録画できるでしょ?
そういう感じで、Firefoxにアドオンっていう追加機能をつけることができます。
やっと辿り着きました。このアドオンっていうのがめちゃめちゃ便利なんです。

マウスジェスチャっていうのを使えば右クリックしながら左右に動かしたらページ進む戻るができたりします。下なら新規ウィンドウとか、自由に設定できます。
FireBugっていうのは、これ使うと、今見てるWebページのソースコードを表示して、その場でそれを書き換えて、書き換えた場合の表示を反映してチェックするっていうことができます。

だからマクロを作っていて、たとえば「このボタンをクリックさせたいけどこいつを指定するのになんていう名前か知りたいな~」と思ったら、そのボタンの付近でFireBugを使えばその辺のソースコードが表示されて、すぐに名前がわかります。
いちいちDocument.All.TagうんたらかんたらってVBAコード書いてプロパティ取得とかしなくていいんです。

これほんと便利なんで、ぜひ使ってみてください。


あんまりVBAの話題じゃないですね。

ってかVBAの記事見るような人は知ってますよね…すみません



--------------------------------------------------------------------

にほんブログ村 為替ブログ 100通貨単位・1000通貨単位へ
にほんブログ村 為替ブログ 100通貨単位・1000通貨単位
ランキングに参加しています。気に入って頂けたらぜひクリックをお願いします。

--------------------------------------------------------------------

もう最近の記事は完全に私信と化してますなぁ
すでに普通に動かせてる方はすみません。
でもいつか同じ症状が出た時のためにも記事にしておきます。

わざと延々読み込み終わらないページが含まれてるフレームサイトを探してテストとかしました。
Sleepで一定時間経過してから、その読み込み終わらないフレームを直接指定してさっさと次のページにジャンプさせようとしたんですがダメでした。
IEのBusyで判定するのではなく、ReadyState = "Complete" とかいろいろやってみましたがダメでした。
なんじゃらほいほい。

結局のところフレームを開くときだけ終わらない、っていう状態で、たまに終わるようですね。
こっちでも症状が出ればいろいろ試せるのですが…むむむ…

環境に依存してそうなので、Busy解除を待たずにSleepで秒数を調整してください。
としか言えないのですが、もし以下の方法で順調にキャッシュフローまで動きそうなら、それでいきましょう。


************************************************************


1. ダウンロードしたExcelブックをコピーして、以下の大幅なコード修正をしてください。

●IEの起動確認・取引画面へアクセス

objIE.Navigate URL03 の直下の Call IE_Wait(objIE) を Sleep(1000) または任意の秒数にする。

一番下にある objIE.Visible = True を objIE.Navigate URL03 の上にする。

●自動ログイン

objIE.Navigate URL02 の直下の Call IE_Wait(objIE) を Sleep(1000) または任意の秒数にする。

一番下にある On Error GoTo ErrorHandler を マクロ開始の Sub MP_auto_repeat() の直下にする。

●リピート注文検索 ~ ErrorHandler:

objFRAME("main").Navigate "https://trade2.moneypartners.co.jp/fxcwebpresen/ListCashflow.do"
の直後から、ErrorHandler: の上にある Exit Sub の直前までをすべて削除する。

End Sub の直前の Application.OnTime Now + TimeValue("00:00:10"), "MP_auto_repeat" を削除する。


2. 次の条件の状態で、それぞれ Sleep を 250、1000、5000、10000 に変えて実行してください。

a. IEがまったく起動していない(ログインしていない)
b. IEを手動で起動し、ログインしていない
c. ログインしており、取引画面が開いている
d. ログインしていなかったが、自動ログインでIEを起動しており、取引画面が開いている
e. d.でIEを起動してログインしたあと、そのウィンドウにマネパ以外の画面が開かれている


************************************************************

この修正したコードは、


IEが起動しているか判定

 ↓

(起動していなかったら起動する)

 ↓

起動していたらそのウィンドウを使用する

 ↓

取引画面URL03にアクセスしようとする

 ↓

(セッションエラーが出たらログインして取引画面URL02にアクセスしようとする)

 ↓

取引画面が開いたら、下画面でキャッシュフローページにアクセスする

 ↓

途中でエラーが出たら「無視して実行」していることをA1セルに表示



という動きのみになります。これで何度か実行してみてほしいのですが…

250→10000→5000→1000の順序でやると、ちょうどいい秒数がなんとなくわかってくると思います。
秒数にかかわらず、a.~e.のいずれかで極端にエラーが起きやすい場合があれば教えてください。
あと、この修正でSleepにしたところを、IE_Weitのままでやろうとすると今まで通り動かなくなるかも知りたいです。


URL03は不要でURL02に統一してもいいのですが、処理段階の違いがわかりやすいのでそのままにしました。


あと、ほんとに時間がかかるときってSleep(10000)でも次の処理開始に間に合わず、エラーになるかもしれません。
最後に削除した、

Application.OnTime Now + TimeValue("00:00:10"), "MP_auto_repeat"

というのを付けると、途中でエラーが出た場合には(10秒後に)もう一度最初からアクセスし直します。
秒数が短いと何度もやり直しになるけど、長ければやり直しの回数は少なくなると思います。
すでにフレーム表示途中であればログイン済みなので URL03 へのアクセスだけもう一回やる感じ。

取引画面のフレーム表示をしなければいけないのは注文の最初だけなので、これで何度かやり直しても、取引画面表示できたらあとは注文を進められるようなので、こういう方法で解決としてはどうか?と思っていますが、いかがでしょう。


--------------------------------------------------------------------

にほんブログ村 為替ブログ 100通貨単位・1000通貨単位へ
にほんブログ村 為替ブログ 100通貨単位・1000通貨単位
ランキングに参加しています。気に入って頂けたらぜひクリックをお願いします。

--------------------------------------------------------------------

コメント欄で話を進めてしまっていましたがこちらにまとめます。

寅さんのおっしゃってた、ログイン状態判定のためにマネパの取引画面にアクセスするところで止まってしまう、という問題。「作成している菜摘の環境では起こらない」「寅さんの環境でも通常通り成功することもある」ということから、コードよりもIEやサーバなどの個々の環境によって起こると判断しました。

症状としては、

・画面は表示されているように見えるのに、IEのタブ横のアイコン(eマーク)がぐるぐるし続けている
・マクロの実行エラーではなくずーっと待機の状態(IEがBusy)で、動かない

とのことでした。

これはマクロのエラーではないので、止まったり再実行することはありません。
ひとつの動作(IEのBusy解除を待つ)をやってる途中という認識です。
これは、そのうちBusyが解除されて、処理が進む可能性があります。

たとえそれが数時間後でも。

はたまた、なんらかの理由で、読み込みは終わっているのにIEがBusy状態のままってこともあり得ます。どちらにしても、いつまでも終わらない、または何十分も終わらないということだと注文ができません。困りましたね。

そこで寅さんに試して頂いたのは、

「IEの起動確認・取引画面へアクセス」の objIE.Navigate URL03 の下直下、Call IE_Wait を削除して Sleep(2000) を記述

IEのBusy解除を待つ(読み込み完了を待つ)のをやめて、単純に2秒だけ待つコードです。
これで、一応は解決されたようです。
今回はログイン判定用のアクセスだったので、画面の表示がすべて終わっていなくても次の処理に支障がないことからこういう方法をとりました。


そうそう、実は問題の個所を勘違いしていましたw

てっきりログイン後に会員画面から取引画面に遷移するところかと思っていたので、フレームの処理を変えればイケるかと思ってたんですが、それでは解決できないところでした。(ログイン済みじゃない場合に表示されるエラーページは同じフレームじゃないんで処理しようがないんです)
寅さんすみません。見当違いなこと言ってました。


で、一応応急処置で動作はできているようなんですけども、さらにお願いです。
次の対応を、試してみて欲しいのです。
マクロをダウンロードした、何も手を加えていない最初の状態から、これだけをやってみてください。

objIE.Navigate URL03 をやめて、objIE.Navigate URL02 にする。

 
URL03は取引画面のフレームを直接表示させようとするアドレスで、URL02はすでにログインしてる人のアカウントの取引画面を表示させるアドレスなので、似て非なるものです。
(ログインしてない時に出るセッションエラーのページもなんだか別のものですw)

これでも頻繁に止まるようならアクセスの仕方の違いではなさそうです。

反対に、これで解決するようなら、他のコードをいじる必要がないので今のところ最善策です。


ちなみに私の方は、もとのコードのまま、昨夜100件の注文を一気に出しまして、そのうち90件目でエラーが出ました。(普段より表示に時間がかかって注文の確認ボタンを押し損ねたエラー)
これは無視して再実行の流れで、最後まで注文が通せました。

たぶん、注文のコード自体には問題はないはずです。


もうこれでダメだったらちょっとすぐには思いつきません。
症状が出る方はSleepの調整でどうにかして頂くしかありません。

ダウンロード先の配布中ファイルは、私と同じ環境なら利用できるはずなので一応そのままにしておきます。コードのエラーでないなら下手に変更しない方がいいので。

だっていろいろ試したら私の環境でもエラー出まくるようになっちゃったんだもん


--------------------------------------------------------------------

にほんブログ村 為替ブログ 100通貨単位・1000通貨単位へ
にほんブログ村 為替ブログ 100通貨単位・1000通貨単位
ランキングに参加しています。気に入って頂けたらぜひクリックをお願いします。

--------------------------------------------------------------------

「取引画面に移動するときにちょくちょく止まる」と言われちゃったんですが…。

ずっと使ってる間にそういうことはなかったのと、今もそれが起きないので、こちらでは手直ししたマクロの動作チェックのしようがありません。
ほんとなら私が対策してアップし直すのがいいんですが。

止まる原因はおそらくIEの読み込み完了が間に合わないからだと思ってます。

そこで、そういう「ちょくちょく止まる」方にはいくつか試して頂きたいことがありまして、

まず一番下の方に待機用のプロシージャがあるんですが、(書き忘れてましたが)断捨離にはオリジナルの待機プロシージャの他に少し時間を長めにしたやつを追加してあります。
これは、取引のある段階だけしょっちゅう読み込み待てずエラーが出てたので、一部だけに適用できる長めの待機プロシージャを用意したものです。

というわけでこれを利用して、該当箇所だけ長めに調整して頂くというのがまずひとつ。

それでもダメならもうひとつ、IE_Wait自体を書き換えてみてください。

'-------------------------------

Sub IE_Wait(ByRef objIE As Object)

Do Until objIE.Busy = False
Sleep (500)
DoEvents
Loop

End Sub

'-------------------------------

少し待ち方が変わりました。あんまり変わってないともいいますが、試してみないといけるかどうかもわからないのでお願いします。


なんでこの読み込み待機に四苦八苦するかというと、ヒゲさんが「注文番号取得できない」っていうので悩んでらっしゃるのと根本は同じ原因で、取引画面がフレームだからなんです。

フレームというのはnanoの取引画面のように2つや3つに分割して別のページを同時に表示しているようなものです。(場合によってはページの中に四角く窓がついてて別のページが入ってることもあります)

nanoの取引画面の場合、一つの大きな枠の中に、二つの枠を作って、それぞれにメニューやメインのページを表示しています。

ここが問題で、IEがどこを見て読み込み完了を判断しているのか、というのがややこしいわけです。
たとえばどこかのページがまだ読み込み終わっていないのに、外枠が読み込み終わったから完了としてしまうとか。

それから、回線の状態とかサーバの状態によって読み込みにめちゃめちゃ時間がかかる場合。
(ほんとに何十分か待ってみたら表示完了しましたなんてこともあります)
IEのbusy状態が解除されるまで待機を繰り返すわけなので、そうなると別にエラーではないのでマクロは止まりませんが待機し続けて動きもしない、という状況になります。

あとやっかいなのがIEのステータスバーでは「完了」とかなってるくせになぜかページは全然表示されておらずタブ横のアイコンがぐるぐるしっぱなし、ってやつですね。
そうなるとマクロは「読み込み終わったから次はクリック…したいのにボタンがないじゃん!」ってなります。

これは…もうね…どうしようもないというか…

それこそエラーを無視して再実行させて、いったんアクセスし直させるって感じです。
(人間がやる場合ももう一回アクセスしたら今度はすぐ表示された、とかいう、そういうアレと同じ)

そのためには、自動ログインのコードの後についてる On Error GoTo ErrorHandler というのを、コードの最初に持ってきてください。
こうすると自動ログインの段階でエラーが出た場合も同じように「エラーを無視して再実行」となります。

たとえばログイン処理中にIE閉じちゃった!ってなったら、「このやろアクセスしようとしたらIEが動いてねーじゃねーか!もっかい最初からやるぞ!」って具合にまたIE起動し始めます。
はっきりいってうざいですw
もうやめたいのに、マクロ止めないとすぐIE立ちあげちゃうみたいな。

でもずーっと自動で動かしたいとなると、IEが不意に終了したときもそうしてもらわないと困るし。



最悪の場合、OSとIEとExcelのバージョンの組み合わせによって、ダメだったりする可能性も…



--------------------------------------------------------------------

にほんブログ村 為替ブログ 100通貨単位・1000通貨単位へ
にほんブログ村 為替ブログ 100通貨単位・1000通貨単位
ランキングに参加しています。気に入って頂けたらぜひクリックをお願いします。

--------------------------------------------------------------------