VBSでフォームに値を繰り返し入れる方法で悩んでいます

このQ&Aのポイント
  • VBScriptでフォームに値を入れることを繰り返したいのですがうまくいかずに悩んでいます。
  • 複数回の入力でオブジェクトがなくなってしまう現象について、どのような対策をすればよいでしょうか?
  • 提供されたコードでは、最初のElseIfの後のオブジェクトがなくなるエラーが発生しています。
回答を見る
  • ベストアンサー

VBSでフォームに値を繰り返し入れる方法で悩んでいます

VBScriptでフォームに値を入れることを繰り返したいのですがどうもうまくいかずに悩んでいます。いい方法を教えて下さい。 指定ページを開いた後に If objIE.Document.URL = strURL Then Set objIN = objIE.Document.getElementByTagName("INPUT") objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop Else objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop End If 以下省略 といったように1回でログインできなかった場合何度か入力するプログラムなのですが最初のElseIfの後のところで「オブジェクトがありません」となってしまいます。 ページも遷移してないのですが何故かオブジェクトがなくなってしまいます。 そういった対策をすればよいのでしょうか? お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

> ページも遷移してないのですが 遷移はしてると思います そのログインページの INPUTタグの3番目の要素が Submit(またはこれに順ずるもの)なのでしょう ここで一度ログイン認証を行ったが 失敗したので戻ってきた といった動きなのでしょう もう一度 document.getElemetsByTagName("INPUT")で objINを取得しなおしてみましょう

関連するQ&A

  • If~ElseIfが冗長なので修正したいが・・・

    If~ElseIf~Else~EndIfの文でかなり冗長な気がするのですがもっと見栄え良く書く方法はないでしょうか? 個人的にはForなんとかで出来るような気がしますがうまくいきません。 If objIE.Document.URL = strURL Then Set objIN = objIE.Document.getElementByTagName("INPUT") objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop Else objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop End If

  • vbsでフォーム入力ができません

    set oIE=Wscript.CreateObject("InternetExplorer.application") oIE.navigate2("http://xxxyyy/index.html") oIE.visible=true Do Until oIE.Busy = False WScript.sleep(250) Loop oIE.document.sf1.name.value="山田太郎" oIE.document.sf1.email.value="abc@xxx.co.jp" oIE.document.sf1.subject.value="人材募集" oIE.document.sf1.submit() 7行目のoIE.document.sf1.name.value="山田太郎"でエラーになってしまいます。”オブジェクトでサポートされていないプロパティまたはメソッドです”とエラーメッセージがでます。vbsは殆どわかりませんのでわかる方いましたらお願いします。

  • SubとEnd Subについて

    VBScriptのSubとEnd Subについて教えて下さい。 Dim LogonID Dim Password Dim URL Dim objIE Dim objINPUT Dim BodyText Dim AriNashi LogonID = "XXXXXXXX" Password = "XXXXXXXXX" URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..." 下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。 使い方が間違っているのでしょうか? Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate URL objIE.Visible = True Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.document.URL = URL Then BodyText = objIE.document.body.innerTEXT AriNashi = InStr(1, BodyText, "Yahoo") If AriNashi > 0 Then Set objINPUT = objIE.document.getElementsByTagName("input") objINPUT(0).value = LoginID objINPUT(1).value = Password objINPUT(2).Click Else msgbox "NO" End If Else WScript.Echo " ダ メ" & Err.Description End If Set objIE = Nothing

  • VBS(WSH)で開いたIEのウィンドウがアクティブにならない

    VBSでタイトルバーのみのIEウィンドウを開き、 SendKeyでtestと入力するスクリプトを作成しています。 ですが、開いたIEのウィンドウがアクティブにならず、 SendKeyがIEに送信されません。 VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが 環境の問題なのか、プログラムの問題なのか判断できません。 どなたかご教授をお願いします。 IEのバージョンは8、OSはWinXPです。 以下、ソースです。 -------------------------------------------------- 'タイトルバーのみのIEを起動する Set WshShell = WScript.CreateObject("WScript.Shell") Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate("http://www.google.co.jp/") objIE.MenuBar = False objIE.StatusBar = False objIE.ToolBar = False objIE.AddressBar = False objIE.Visible = True '表示待ちループ Do While objIE.Busy WScript.Sleep 100 Loop '[test]で検索 WshShell.SendKeys("test") WScript.Sleep(100) WshShell.SendKeys("{TAB}") WScript.Sleep(100) WshShell.SendKeys("{ENTER}") --------------------------------------------------

  • VBAでURLを指定する方法

    VBAを使用して、エクセルに記載しているテキストで開くURLを変えるプログラムを作成しようと思っております。 例えばA1に『yahoo』と入力されていれば、『http://www.yahoo.co.jp/』を開き、 『google』と入力されていれば、『http://www.google.com』を開くようにしたいです。 現在、下記のプログラムを使用していますので、 下記を流用できるようにして頂けると幸いです。 Sub test() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "『特定URL』" Do While objIE.ReadyState <> 4 Do While objIE.Busy = True Loop Loop For Each Obj In objIE.Document.getelementsbytagname("input") If Obj.Name = "mail" Then objIE.Document.getelementsbyname("mail")(0).Value = Range("C1").Value Else If Obj.Name = "password" Then objIE.Document.getelementsbyname("password")(0).Value = Range("D1").Value Else objIE.Document.Links(1).Click End If End If Next End Sub 宜しくお願いいたします。

  • VBAで教えてgooに自動ログインしたい

    Sub 教えてgoo() Dim objIE As Object Const READYSTATE_COMPLETE As Long = 4 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://login.mail.goo.ne.jp/id/authn/LoginStart?Site=oshiete.goo.ne.jp&Success=http%3A%2F%2Foshiete.goo.ne.jp%2F" Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all.all("uname").Value = "gooID" objIE.document.all.all("pass").Value = "gooPW" Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all("ログイン").Click End Sub --------------------------------------------------------- を実行してみても、 objIE.document.all.all("uname").Value = "gooID" objIE.document.all.all("pass").Value = "gooPW" objIE.document.all("ログイン").Click の部分がエラーになってしまいます。 教えてgooは、VBAでログインできないように規制されてるのでしょうか?

  • 【VBS】IEのページ読み込み中待機について

    IE8(WinXPSP3)で決まったサイトを複数開いていくVBSを作成しています。 開きたいサイトや数は時々変わるので、最初の方でサイトURLと数を設定しています。 普通にサイト1をIEで開いて、ページが表示されるまで待機し、 その後、サイト2以降を順次新しいタブで開く→表示されるまで待機→開く→待機と 処理させますが、最終的にはサイト1が表示されたタブがアクティブになっていてほしいので サイト2以降が表示される際はアクティブタブが変わらないように 「objIE.Navigate2 URL(i), 4096,」としています。 ここから質問ですが、今の状態だとサイト2を開いたあとの「待機」が機能していません。 サイト1が開く→表示まで待機する→サイト2~5が一気に開いてしまう、という 具合です。 サイト1開く→表示完了まで待機→サイト2開く→表示完了まで待機→サイト3開く→ 表示完了まで待機→としていくにはどのようにしてやればよいでしょうか? プライベートで作っているものなので、特に急いではおりません。 よろしくお願いします。 Dim objIE Dim i, cnt Dim URL(20) URL(1) = "http://www.yahoo.co.jp/" URL(2) = "http://www.google.co.jp/" URL(3) = "http://www.goo.ne.jp/" URL(4) = "http://www.excite.co.jp/" URL(5) = "http://jp.msn.com/" cnt = 5 Const navOpenInNewTab = &H800 Const navOpenInBackgroundTab = &H1000 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate2 URL(1) Do Until objIE.Busy = False WScript.sleep(1000) Loop ↓↓↓↓↓ここからが質問したいところです↓↓↓↓↓ For i = 2 to cnt step 1 objIE.Navigate2 URL(i), 4096, navOpenInNewTab Do Until objIE.Busy = False WScript.sleep(1000) Loop Next Set objIE = Nothing

  • VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法

    VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。 現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。 Set IE = CreateObject("InternetExplorer.Application") Set WshShell = CreateObject("WScript.Shell") IE.Visible = True IE.Navigate("https://サイトのURL") Do Until IE.Busy = False WScript.Sleep 1000 WshShell.SendKeys "y" Loop '(セキュリティの警告が出るため) WScript.Sleep 100 WshShell.SendKeys "{TAB}" WScript.Sleep 100 WshShell.SendKeys "loginid" WScript.Sleep 100 WshShell.SendKeys "{TAB}" WScript.Sleep 100 WshShell.SendKeys "password" WScript.Sleep 100 WshShell.SendKeys "{TAB}" WshShell.SendKeys "{ENTER}" 操作したいページのソースの一部を抜粋すると下記のようになっています。 テキストボックス <INPUT type="text" name="loginId" class="Necessary" size="20" maxlength="5" value="" tabindex="20"> ボタン <INPUT class="button10" type="button" name="sentaku" value="認証" onClick="javascript:execute・・・・略 うまく操作できる方法を教えてください。 よろしくお願いします。

  • VBAでIE操作

    こんばんは。エクセル2003です。 証券会社にVBAでログインを試みてるのですができません。 ソースの一部を転記します。 <label for="account_id"><span>ユーザー名</span></label> <input type="text" tabindex="1" id="account_id" name="account_id" /> <label for="password"><span>パスワード</span></label> <input type="password" tabindex="2" id="password" name="password" /> <div id="rememberbox"> <label for="remember" id="rememberlabel">ユーザー名を記録する</label> <input type="checkbox" tabindex="3" name="remember" id="remember" /> </div> なので、下記VBAコードを作りました。 Sub IGマーケット証券() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.igmarkets.co.jp/login/" Do While objIE.Busy = True DoEvents Loop Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.Document.all("account_id").Value = "test" objIE.Document.all("password").Value = "test" objIE.Document.Forms(0).submit Set objIE = Nothing End Sub ですが、 objIE.Document.all("account_id").Value = "test" のところでエラーになってしまいます。 objIE.Document.all("login").Value = "test" に変えても同じです。 何がいけないのでしょうか? アドバイスよろしくお願いします。

  • 次回からのログインを省略にチェックを入れたくない

    vbaで教えてgoo(Goo知恵袋)にログインを試みています。 ログインする事はできたのですが 出来れば「次回からのログインを省略」にチェックを入れたくなのです。 Goo知恵袋はデフォルトでチェックが入っています。 自分で作ったコードは、 --------------------------------------------------------- Sub test() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://otasuke.goo-net.com/mypage#tabs" '表示終了まで共通_表示待ち Do While objIE.Busy = True DoEvents Loop objIE.document.all.mailaddress.Value = "" objIE.document.all.Password.Value = "" '表示終了まで共通_表示待ち Do While objIE.Busy = True DoEvents Loop objIE.document.all("login_skip")(1).Checked = False objIE.document.Forms(1).submit Set objIE = Nothing End Sub --------------------------------------------------------- です。 objIE.document.all("login_skip")(1).Checked = False でエラーになってしまいます。 ご教授よろしくお願いします。

専門家に質問してみよう