人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: kgfjfdhgyf
●カテゴリ:ウェブ制作
✍キーワード:elements name sub VBScript Web
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● KirakiraHikaru
●50ポイント

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

objIE.Document.forms(0)

※1番目のフォーム

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

◎質問者からの返答

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

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

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

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

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


2 ● llusall
●50ポイント

With objIE.Document.forms(0)


じゃ、駄目でしょうか?

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

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

◎質問者からの返答

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

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

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

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

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


3 ● KirakiraHikaru
●50ポイント

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


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

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

◎質問者からの返答

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

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

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

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

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

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

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


4 ● llusall
●50ポイント ベストアンサー

再回答ですみません。


ユーザ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の指定ばかりに目が行ってしまい、初歩的なミスに気が付きませんでした。

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

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


5 ● mj99
●50ポイント

推測ですが、、

ページ読込みが完了しないうちに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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ