VBScriptについて教えてください。

指定したWEBページのユーザー名とパスワードを自動入力してログインするスクリプトを組みました。(現在組んでいるスクリプトの抜粋を文末に添付します)

しかし、

With objIE.Document.forms("ここにフォーム名を指定")

のところで指定するフォーム名が目的のサイト内に見当たりません。

Yahooを見ると、ログインページのソースに下記のようにフォーム名をname=login_formと記述してあります。

<form method=post action="https://login.yahoo.co.jp/config/login?5bksa8bkj62er" autocomplete=off name=login_form>

しかし、私が目的とするサイトは

<form action="login-post.php" method="post">

との記載しかなく、フォーム名をみつける事が出来ません。

この場合、フォーム名はどの用に指定すればいいのでしょうか。


**以下、現在組んでいるスクリプトの抜粋**

Sub sFormSetProc()

 With objIE.Document.forms("ここにフォーム名を指定")

'フォームの設定
.elements("ここにテキストボックス名を指定").value = "ここにユーザ名を指定"
.elements("ここにテキストボックス名を指定").value = "ここにパスワードを指定"

'フォームの送信
.Submit

End With

End Sub

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/03/23 02:22:44
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:llusall No.4

回答回数505ベストアンサー獲得回数61

ポイント50pt

再回答ですみません。


ユーザIDとパスワードを教えていただければ、調査できるかと思いますが、

そうはいかないと思いますので、以下、思いついたことを記載します。


まず、フォームの問題は、インデックスを指定することで解決できたのだと思いますが、

まだ、クッキー(セッションID)あたりに問題があるように思えます。


当該「login.php」にアクセスし、HTTPヘッダをキャプチャしますと、

Cookie: PHPSESSID=XXXXXXXXXXXXXXXXXXXXXXXXXXX

というのがレスポンスされてきておりました。

このクッキー(セッションID)も一緒に返す必要があるのではないかと思います。


スクリプトの全体が判らないので、何とも言えませんが、

いきなりsubmitするような作りになっていませんか?


一旦、「login.php」にナビゲートしてからsubmitするようにしてみては如何かと思います。

#IEのオブジェクトは、クッキーを受けて、そのクッキーを送出してくれるかも。


また、それで駄目であれば、

objIE.Document.forms(1).item("Submit22").Click 'ボタンをクリックさせる

を試してみたらどうでしょうか?


※IEのオブジェクトは使った事がないので、クッキーの取扱いや、Clickというメソッドが使えるかどうか判りません。すみません。

id:kgfjfdhgyf

丁寧にご回答有難う御座います。

何とか解決することが出来ました。

おっしゃる通りforms(1)で間違い有りませんでした。

今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。

formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。

申し訳有りません・・・。

本当に有難う御座いました。

2007/03/23 02:11:32

その他の回答4件)

id:KirakiraHikaru No.1

回答回数354ベストアンサー獲得回数68

ポイント50pt

フォーム名がついていない場合は、下記のようにして番号指定で呼び出す必要があると思います。

objIE.Document.forms(0)

※1番目のフォーム

http://invest-prg.rich-prj.com/p_progtip/vba_ie.html

id:kgfjfdhgyf

ご回答有難う御座います。

0~5まで試してみましたが、うまくいきませんでした。

ちなみに、自動ログインしようとしているページは下記となります。

(はてなにより削除しました)

もしかしたらフォーム以外の部分で間違いがあるのでしょうか・・・。

2007/03/22 11:56:10
id:llusall No.2

回答回数505ベストアンサー獲得回数61

ポイント50pt

With objIE.Document.forms(0)


じゃ、駄目でしょうか?

1ページにフォームが沢山ある場合は、0から数えた番号のものになるかと思います。

はずしていたらスミマセン。

id:kgfjfdhgyf

ご回答有難う御座います。

0~5まで試してみましたが、うまくいきませんでした。

ちなみに、自動ログインしようとしているページは下記となります。

(はてなにより削除しました)

もしかしたらフォーム以外の部分で間違いがあるのでしょうか・・・。

2007/03/22 11:56:21
id:KirakiraHikaru No.3

回答回数354ベストアンサー獲得回数68

ポイント50pt

ログインフォームは2番目にあるので、forms(1)です。


objIE.Document.forms(1).item("email").value

objIE.Document.forms(1).item("password").value

id:kgfjfdhgyf

丁寧にご回答有難う御座います。

何とか解決することが出来ました。

おっしゃる通りforms(1)で間違い有りませんでした。

今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。

formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。

申し訳有りません・・・。

本当に有難う御座いました。

2007/03/23 02:10:12
id:llusall No.4

回答回数505ベストアンサー獲得回数61ここでベストアンサー

ポイント50pt

再回答ですみません。


ユーザIDとパスワードを教えていただければ、調査できるかと思いますが、

そうはいかないと思いますので、以下、思いついたことを記載します。


まず、フォームの問題は、インデックスを指定することで解決できたのだと思いますが、

まだ、クッキー(セッションID)あたりに問題があるように思えます。


当該「login.php」にアクセスし、HTTPヘッダをキャプチャしますと、

Cookie: PHPSESSID=XXXXXXXXXXXXXXXXXXXXXXXXXXX

というのがレスポンスされてきておりました。

このクッキー(セッションID)も一緒に返す必要があるのではないかと思います。


スクリプトの全体が判らないので、何とも言えませんが、

いきなりsubmitするような作りになっていませんか?


一旦、「login.php」にナビゲートしてからsubmitするようにしてみては如何かと思います。

#IEのオブジェクトは、クッキーを受けて、そのクッキーを送出してくれるかも。


また、それで駄目であれば、

objIE.Document.forms(1).item("Submit22").Click 'ボタンをクリックさせる

を試してみたらどうでしょうか?


※IEのオブジェクトは使った事がないので、クッキーの取扱いや、Clickというメソッドが使えるかどうか判りません。すみません。

id:kgfjfdhgyf

丁寧にご回答有難う御座います。

何とか解決することが出来ました。

おっしゃる通りforms(1)で間違い有りませんでした。

今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。

formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。

申し訳有りません・・・。

本当に有難う御座いました。

2007/03/23 02:11:32
id:mj99 No.5

回答回数138ベストアンサー獲得回数38

ポイント50pt

推測ですが、、

ページ読込みが完了しないうちにfomrsを参照しようとしてエラーになっているのかも?

下記コードでsubmitはかかりました。

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "(はてなにより削除しました)"

dt = Now()
Do Until objIE.readyState = 4          ' 完了するまで待つ
  If DateAdd("s", 3, dt) < Now() Then  ' 3秒すぎたらアウト
    WScript.Quit
  End If
Loop

With objIE.Document.forms(1)
  .elements("email").value = "12"
  .elements("password").value = "34"
  .submit
End With
id:kgfjfdhgyf

丁寧にご回答有難う御座います。

何とか解決することが出来ました。

今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。

formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。

申し訳有りません・・・。

本当に有難う御座いました。

読み込みの完了に関しては、下記のように待機するようにしたので問題有りませんでした。

'ページの読み込みが終わるまで待機する

Do Until objIE.Busy = False

'250ミリ秒のインターバルを置く

WScript.sleep(250)

Loop

2007/03/23 02:16:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません