指定した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
再回答ですみません。
ユーザIDとパスワードを教えていただければ、調査できるかと思いますが、
そうはいかないと思いますので、以下、思いついたことを記載します。
まず、フォームの問題は、インデックスを指定することで解決できたのだと思いますが、
まだ、クッキー(セッションID)あたりに問題があるように思えます。
当該「login.php」にアクセスし、HTTPヘッダをキャプチャしますと、
Cookie: PHPSESSID=XXXXXXXXXXXXXXXXXXXXXXXXXXX
というのがレスポンスされてきておりました。
このクッキー(セッションID)も一緒に返す必要があるのではないかと思います。
スクリプトの全体が判らないので、何とも言えませんが、
いきなりsubmitするような作りになっていませんか?
一旦、「login.php」にナビゲートしてからsubmitするようにしてみては如何かと思います。
#IEのオブジェクトは、クッキーを受けて、そのクッキーを送出してくれるかも。
また、それで駄目であれば、
objIE.Document.forms(1).item("Submit22").Click 'ボタンをクリックさせる
を試してみたらどうでしょうか?
※IEのオブジェクトは使った事がないので、クッキーの取扱いや、Clickというメソッドが使えるかどうか判りません。すみません。
フォーム名がついていない場合は、下記のようにして番号指定で呼び出す必要があると思います。
objIE.Document.forms(0)
※1番目のフォーム
ご回答有難う御座います。
0~5まで試してみましたが、うまくいきませんでした。
ちなみに、自動ログインしようとしているページは下記となります。
(はてなにより削除しました)
もしかしたらフォーム以外の部分で間違いがあるのでしょうか・・・。
With objIE.Document.forms(0)
じゃ、駄目でしょうか?
1ページにフォームが沢山ある場合は、0から数えた番号のものになるかと思います。
はずしていたらスミマセン。
ご回答有難う御座います。
0~5まで試してみましたが、うまくいきませんでした。
ちなみに、自動ログインしようとしているページは下記となります。
(はてなにより削除しました)
もしかしたらフォーム以外の部分で間違いがあるのでしょうか・・・。
ログインフォームは2番目にあるので、forms(1)です。
objIE.Document.forms(1).item("email").value
objIE.Document.forms(1).item("password").value
丁寧にご回答有難う御座います。
何とか解決することが出来ました。
おっしゃる通りforms(1)で間違い有りませんでした。
今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。
formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。
申し訳有りません・・・。
本当に有難う御座いました。
再回答ですみません。
ユーザIDとパスワードを教えていただければ、調査できるかと思いますが、
そうはいかないと思いますので、以下、思いついたことを記載します。
まず、フォームの問題は、インデックスを指定することで解決できたのだと思いますが、
まだ、クッキー(セッションID)あたりに問題があるように思えます。
当該「login.php」にアクセスし、HTTPヘッダをキャプチャしますと、
Cookie: PHPSESSID=XXXXXXXXXXXXXXXXXXXXXXXXXXX
というのがレスポンスされてきておりました。
このクッキー(セッションID)も一緒に返す必要があるのではないかと思います。
スクリプトの全体が判らないので、何とも言えませんが、
いきなりsubmitするような作りになっていませんか?
一旦、「login.php」にナビゲートしてからsubmitするようにしてみては如何かと思います。
#IEのオブジェクトは、クッキーを受けて、そのクッキーを送出してくれるかも。
また、それで駄目であれば、
objIE.Document.forms(1).item("Submit22").Click 'ボタンをクリックさせる
を試してみたらどうでしょうか?
※IEのオブジェクトは使った事がないので、クッキーの取扱いや、Clickというメソッドが使えるかどうか判りません。すみません。
丁寧にご回答有難う御座います。
何とか解決することが出来ました。
おっしゃる通りforms(1)で間違い有りませんでした。
今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。
formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。
申し訳有りません・・・。
本当に有難う御座いました。
推測ですが、、
ページ読込みが完了しないうちに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
丁寧にご回答有難う御座います。
何とか解決することが出来ました。
今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。
formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。
申し訳有りません・・・。
本当に有難う御座いました。
読み込みの完了に関しては、下記のように待機するようにしたので問題有りませんでした。
'ページの読み込みが終わるまで待機する
Do Until objIE.Busy = False
'250ミリ秒のインターバルを置く
WScript.sleep(250)
Loop
丁寧にご回答有難う御座います。
何とか解決することが出来ました。
おっしゃる通りforms(1)で間違い有りませんでした。
今回、実行用のwsfファイルからプログラム本体のvbsファイルを取り込む構成にしていたのですが、取り込み部分時の指定方法が悪かったためエラーになっていました。
formの指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。
申し訳有りません・・・。
本当に有難う御座いました。