- - PR -
VBAでWebにログインしたい
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-22 00:44
お忙しいところ申し訳ございませんが、アドバイス頂ければと思い投稿させて頂きました。
あるWebページに自動でログインするプログラムを作成したのですが、ログインできません。 何度見直しても何が悪いのか分からず困っています。 ID、パスワードの設定は上手くいくのですが、'Forms(0)をsubmitした後で必ずエラーになります。可能でしたら、私のプログラムの間違いをご指摘頂けないでしょうか? --- Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub test() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True 'ログインページへ移動 objIE.navigate "https://trade.orix-sec.co.jp/webbroker3/46/pc/WEB3AccountLogin.jsp" Do While objIE.busy = True DoEvents Loop Sleep (2000) 'ユーザ名、パスワードは実際に利用するものを設定 objIE.Document.all.aa_accd.Value = "ユーザ名" objIE.Document.all.lg_pw.Value = "パスワード" 'オンライン・ホームを選択 objIE.Document.loginForm.lg_isc(0).Checked = True Sleep (1000) 'Forms(0)をsubmitした後でエラーになります。 objIE.Document.Forms(0).submit End Sub | ||||||||||||
|
投稿日時: 2008-04-22 01:55
Form を Submit するのではなく、「ログイン」と書かれたボタンを Click しなければなりません。 Web サイトによっては Form を Submit するだけでも良いこともありますが、手操作をシミュレートするのならば、ボタンをクリックする必要があります。ボタンがたまたま submit のボタンならば Form を Submit すれば良い場合もありますが、それは特殊例だと考えておくほうが汎用性があって良いでしょう。 | ||||||||||||
|
投稿日時: 2008-04-23 02:55
ご回答ありがとうございます。
Form を Submit することとボタンをクリックすることは同じだと思っていました。 違ったんですね。 私の理解ではホームページでのログインボタンは下記のような記述となっています。 <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> この場合、ログインの記述は次のように書けば動作します。 objIE.document.all.btn01.Click しかし、今回ログインしたいページでは、ログインボタンは下記のように記述されています。 <input type=image alt="ログイン" src="/webbroker3/46/pc/images/bt_login.gif" width="70" height="18" hspace="15" vspace="5" border="0"> この場合、どのようにしてクリックすればいいのか分からないのです。 TYPE="submit"の記述がないこと、NAME=の記述がないことからお手上げの状態です。 そこで、もしかすれば Form を Submit すればいいのかなと思って試したのですが、それも上手く動作しないので、何が悪いのか分からず質問させて頂いた次第です。 ボタンをクリックする際の参考となるキーワードだけでも教えて頂ければ助かります。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2008-04-23 09:42
サイトの構築者には name 属性を付けておいてほしいものですね。 ないと地道に探すしかないです。VBA のデバッガーのウォッチウィンドウでひたすらツリーを展開して探すことになります。 以下は、たとえば、alt 属性で検索するコード例です。
| ||||||||||||
|
投稿日時: 2008-04-25 01:04
unibonさん
回答ありがとうございます。 いただいたコードを実行するとログインできました。 コードが十分に理解できていないので、週末に再度勉強しようと 思うのですが、参考となるWebページや書籍等を教えていただく ことは可能でしょうか? ひたすらウォッチウィンドウでツリーを展開するのが、もしか したら一番の勉強になるのかもしれませんが。 | ||||||||||||
|
投稿日時: 2008-04-25 11:05
そんなに腰を据えるほどのアルゴリズムではないです。 簡単に説明しますと、
個人的には、Microsoft HTML Object Library を参照に追加して事前バインディングで行います。 まあ最初のかーくんさんのコードが遅延バインディングなので、unibon さんはそれに合わせただけですが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2008-04-25 17:06
とくにまとまったものは私も知りません。私も教えてほしいくらいです。 現状は特有のキーワードでネットを検索するぐらいしかないと思います。そうすればこのような掲示板などがヒットします。キーワードは、今回の場合でしたら、HTMLInputElement や Document や Forms などになるでしょう。
これしかないでしょう。さすがに毎回ウォッチウィンドウでツリーを展開するのは辛いので、標準モジュールに検索用のサブルーチンを作っておいて、それをイミディエイトウィンドウやウォッチウィンドウで呼び出して使うと多少便利かもしれません。 なお、もしも Excel VBA に未練がなければ Visual C# などに移行したほうが使い勝手の面では良いかもしれません。 Visual Studio .NET ぐらいまでだったら、VB や Excel VBA のほうがまだ使いやすかった面も結構あったかもしれませんが、Visual Studio 2005 あたりからと比較すると、Excel VBA には Excel と連携しやすい以外のメリットはないかもしれません。 | ||||||||||||
|
投稿日時: 2008-04-26 11:08
これしかない、と書きましたが、それはプログラムでアクセスするためのクラスの集約構造を調べるためという意味です。 仕様が不明な、(すなわちプログラムでアクセスするために必要な仕様が公開されていない)、サイトの HTML の構造を調べるためなら、たとえばですが、Firefox に標準で付属する DOM Inspector などのツールを使うと便利です。これで目的とするテキストボックスやボタンにアタリをつけておいてから、プログラムからアクセスするようなコードを書くと仕事が早くできます。 あくまでも私はこうやってます、という紹介ですが。
ちなみに、いったん型付きの変数に入れると、VB でインテリセンスなども使えるし便利です。 ただ、使っていて感じたことですが、MSHTML(Microsoft HTML Object Library)特有のことですが、型がたくさんあるわりにはあまり型同士の違いがないので、イチイチ型を意識してコーディングするのが面倒、という感じもしました。 C#/VB.NET だと MSHTML ではなく、System.Windows.Forms.HtmlElement などを使うことが増えると思いますが、こっちは型の種類が極端に少なくて、それはそれで不安ですが、でも使いやすいと感じています。ツールも前述のように使いやすいです。たとえばデバッガーでツリーを展開するときにクリックしなくてもよい(マウスを近づけるだけで展開してくれる)など、です。 |