JavaScript初心者の自動ログインとページ移動の仕掛けについて

このQ&Aのポイント
  • JavaScript初心者が作成した自動ログインとページ移動の仕掛けについて、特定のページに移動できない問題が発生しています。
  • 問題の原因は、location.hrefで指定した移動先に正しくジャンプできていないことです。
  • 解決方法として、コードを確認し、移動先のURLが正しく指定されているか確認する必要があります。
回答を見る
  • ベストアンサー

JavaScript初心者です

今、あるページに自動でログインした後で、特定のページまで移動する、という仕掛けを 作っています。ソースはこんなんです。 ------ここから----- main(); function main() { var ie = WScript.CreateObject("InternetExplorer.Application"); ie.visible = true; ie.navigate("URL"); while( (ie.Busy) || (ie.readystate != 4) ) { WScript.Sleep(100); } // ユーザID ie.document.getElementById("email").value = "メールアドレス"; // パスワード ie.document.getElementsByName("password").item(0).value = "パスワード"; ie.document.getElementsByName("menu_btn").value = "ログインページ"; ie.document.getElementsByTagName("form").item(0).submit(); while( (ie.Busy) || (ie.readystate != 4) ) { WScript.Sleep(100); } } var location; location.href = "移動先"; -----ここまで----- ログインは無事にできるのですが、そこのリンクを踏んで特定のページまで行くように location.hrefで指定してるのに飛ぶことができません。何がおかしいのでしょうか?

noname#197997
noname#197997

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

  • ベストアンサー
noname#247307
noname#247307
回答No.1

その手前まで、散々ieを操作してきながら、なぜいきなりlocation.href? これは、JavaScriptといっても、Window Script Hostのスクリプトですよね? その手前で、ie.navigateで表示をしているのですから、location.hrefのところも同様にie.navigateすればいいと思いますよ。

noname#197997
質問者

お礼

なるほど!それでよかったのですね。 locationとか絶対に使わないといけないんだと 思い込んでました; 無事解決しました。どうもありがとうございます^-^

関連するQ&A

  • ログインIDの変数は出来ませんか?

    var IE = WScript.CreateObject("InternetExplorer.Application"); IE.Visible = true; IE.Width = 1000; IE.Height = 1000; IE.Navigate("https://www.***.co.jp/" method="post" name="AutoLogOn"); while(IE.busy) ; while(IE.Document.readyState != "complete") ; IE.Document.all('loginForm').username.value = "1234"; IE.Document.all('loginForm').password.value = "5555"; IE.Document.all('loginForm').submit(); while(IE.busy) ; while(IE.Document.readyState != "complete") ; 上記の様にログインいつもしているのですが、このFILEをいろいろな人が使うので、デスクトップにusernameとpasswordだけを記入したテキストを毎回作り、 IE.Document.all('loginForm').username.value = 変数1; IE.Document.all('loginForm').password.value = 変数2; この変数をデスクトップのテキストのなかの文字列を参照することは出来ませんか?

  • UWSC(LIST選択できず)

    初心者です。 UWSCの自動化で上手くいかない所を、どなたか教えていただけないでしょうか? 内容はあるサイトにログオンした後、コンボBOXで選択する画面を自動化したいのですが上手くいきません。UWSCの記載は下記の通りです。 どなたかお分かりになる方よろしくお願いします。m(_ _)m ID = INPUT("貴方のIDは?") PW = INPUT("貴方のPWは?") IE = CREATEOLEOBJ("INTERNETEXPLORER.APPLICATION") IE.VISIBLE = TRUE IE.NAVIGATE("あるサイト") repeat sleep(0.1) until !ie.busy and ie.readystate=4 ie.document.forms[0].elements[2].value =ID ie.document.forms[0].elements[3].value =PW repeat sleep(0.1) until !ie.busy and ie.readystate=4 ie.document.forms[0].submit repeat sleep(0.5) until !ie.busy and ie.readystate=4 ret = IELINK(IE,"あるリンク") repeat sleep(0.5) until !ie.busy and ie.readystate=4 ie.document.forms[0].elements[0].VALUE ="あるコンボ選択肢" ↑ここだけ上手く動かないです。 ie.document.forms[0].elements[2].value ="01/02/2007" ie.document.forms[0].elements[3].value ="07/07/2007" repeat sleep(0.5) until !ie.busy and ie.readystate=4 ie.document.forms[0].elements[4].CLICK()

  • WSH(JScript)既に開いているIEのビジー

    .run で起動させた物がIEである場合、 そのIEの .busy や .readyState を取得したいと考えています。 たとえば以下の様な感じです。 var shApp = WScript.CreateObject("Shell.Application"); var iehandle; // 起動されてなければ実行する if(launchflag == 0){ var objSh = WScript.CreateObject("WScript.Shell"); objSh.Run("実行するとIEが起動するVBS等"); } //////// Aの地点 /////////////// // 対象ウィンドウが無いか探す for(i= 0; i< shApp.Windows().Count; i++){ // ここで対象のIEが見つればTrue if(shApp.Windows().item(i).FullName.match(/iexplore.exe$/i) && shApp.Windows().item(i).document.title.match(/対象のIEタイトル/i)){ iehandle = i; break; } } while(shApp.Windows().item(iehandle).document.readyState == "complete"){WScript.Sleep(100);} // 起動したのを確認してすぐ次の処理へ この例だとAの地点(その↓のif文の判定)で原因不明のエラーがでます。 ただ、WScript.Sleep(2000);などを入れて待機すると問題無く動作するので IEが起動しきる前に参照しようとしてエラーになっているのではないかと思われます。 どの様にするべきでしょうか?

  • javascriptを使ったformへの自動ログインがうまくいきません

    こんにちは、以下のような書かれたサイトにjavascriptを使って自動ログインしたいと考えていますが、うまくログインされません。 一番下のinputタグにてログインしているようなのですが IE.Document.Form1.imgLogin.click(); とすると、エラーになるので IE.Document.Form1.elements(5).click(); としましたがエラーにはならないもののうまくいきませんでした。 IE.Document.Form1.elements(5).data = true; IE.Document.Form1.elements(5).value = true; IE.Document.Form1.action = "index.aspx"; IE.Document.Form1.submit(); としてみましたが、こちらもうまくいきませんでした。 どのようにしたら、自動ログインすることが可能なのでしょうか? 教えて頂けると非常に助かります。 よろしくお願いいたします。 ---サイトフォーム <FORM id=Form1 name=Form1 action=index.aspx method=post> <INPUT id=__VIEWSTATE type=hidden value=... name=__VIEWSTATE> <INPUT id=__EVENTVALIDATION type=hidden value=... name=__EVENTVALIDATION> <INPUT id=txtUid maxLength=6 value="" name=txtUid> <INPUT id=txtPwd type=password maxLength=20 value="" name=txtPwd autocomplete="off"> <INPUT language=javascript id=imgLogin onclick="{ if (document.Form1.txtUid.value==&quot;&quot;) { document.Form1.txtUid.focus();alert('ユーザIDを入力してください。');return false;} if (document.Form1.txtPwd.value==&quot;&quot;) {alert('パスワードを入力してください。');document.Form1.txtPwd.focus();return false;} return true;};" type=image src="img\login1.gif" border=0 name=imgLogin></form> ----オートログイン.js var IE = WScript.CreateObject("InternetExplorer.Application"); IE.Visible = true; IE.Navigate("http://hogehoge/hoge/index.aspx"); while(IE.busy) ; while(IE.Document.readyState != "complete") ; IE.Document.forms(0).elements(3).value = "user"; IE.Document.forms(0).elements(4).value = "password"; //IE.Document.forms(0).elements(5).click(); //IE.Document.Form1.imgLogin.click(); IE.Document.Form1.elements(5).data = true; IE.Document.Form1.action = "index.aspx"; IE.Document.Form1.submit();

  • 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の後のところで「オブジェクトがありません」となってしまいます。 ページも遷移してないのですが何故かオブジェクトがなくなってしまいます。 そういった対策をすればよいのでしょうか? お願いします。

  • なぜmatchメソッドがエラーになる?

    こんばんは。 下記スクリプトですが、「★★★」の個所で「オブジェクトでサポートされていないプロパティまたはメソッドです。」となってしまいます。なぜでしょうか?また、回避するにはどうしたらいいでしょうか? やりたいことは、"rd"を含むURLだけリストしないのです。 -- var IE = WScript.CreateObject("InternetExplorer.Application"); var URL = "http://www.yahoo.co.jp"; IE.Navigate(URL); WaitLoad(); var fs = WScript.CreateObject("Scripting.FileSystemObject"); var stream = fs.CreateTextFile("yahoo.txt"); var objTagsAs = IE.Document.all.tags("A"); for (i = 0; i < objTagsAs.length; i++) if (objTagsAs[i].match(/rd/i) != -1) //★★★ stream.Write(objTagsAs[i] + "," + objTagsAs[i].innerText + "\r\n"); stream.Close(); function WaitLoad() { var stat, dstart; stat = 0; while(true) if(stat == 0) { if(!IE.Busy) if(IE.Document.readyState == "complete") { dstart = (new Date()).getTime(); stat = 1; } } else { if(!IE.Busy && IE.Document.readyState == "complete") { if((new Date()).getTime() >= dstart + 3000) break; } else stat = 0; } }

  • javascriptの動作について

    こんばんは。 直接アドレス指定などしてきたものについては、 トップページへ飛ばすことをしようと思ったのですが、 以下の記述だと、IE8では動作しましたが、GoogleCrome(11.0.696.77)、firefox(3.6.0)、safari では動作しませんでした。(location.hrefがダメなんでしょうか?) 解決策・回避策などあれば教えてください。 よろしくお願いします。 <script language="JavaScript" type="text/JavaScript"> <!-- var url; url = document.referrer; if(url != 'http://xxxxxxxxx'/){ location.href('http://xxxxxxxxxxxxx'); } // --> </script>

  • 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

  • Javascript onloadイベントについて

    AppleScriptの中にJavaScriptを書き、 location.hrefでページ移動し、onloadでページ読み込み後、指定タグを変数にいれて、 フォーム入力などの操作を行いたいのですが、 ページ移動後、フォーム入力をすることなく、そのまま処理を終了してしまいます。 いろいろと試行錯誤してみましたが、どうも解決しないのでご教授いただきたいです。 よろしくお願いいたします。 tell application "Google Chrome" tell window 1 open location "http://www.google.co.jp/" repeat while loading of active tab delay 0.1 end repeat tell active tab execute javascript " function idou(url) { location.href = url } function nyuryoku(){ var inp = document.getElementsByTagName('input') inp[0].value = 123 } idou('http://www.goo.ne.jp/') window.onload = nyuryoku() " end tell end tell end tell

  • 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でログインできないように規制されてるのでしょうか?

専門家に質問してみよう