• 締切済み

VBScriptでリンクをクリックしても開かない

VBScriptでリンクをクリックし新しいウィンドウで開こうとしているのですが開いてきません。 特にエラーにもならず最後まできれいに終了します。 ちなみに現在のウィンドウで開くリンクの場合はうまく開きます。 メッセージボックスではさんでnameの内容は確認できたのでClickは実行されているはずなのですが・・・何が悪いのでしょうか。 なおクリックしている部分は以下のような記述になっています。 (このリンクは現在のウィンドウなのでうまく開きます) '''http://www.yahoo.co.jp/ For Each objLINK In objIE.Document.Links   If objLINK.InnerText = "ログイン" Then     objLINK.Click     Exit For  End If Next

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ページを読み終わる前にクリックしているのでは? もしくは漢字コードが違っていて「ログイン」というキーワードにマッチしていないとか? 'yahoo_login.vbs function IEBUSY(oIE) Do Until oIE.Busy = False WScript.sleep(250) Loop end function URL="http://www.yahoo.co.jp/" Set WSHShell=Wscript.CreateObject("Wscript.Shell") set oIE=Wscript.CreateObject("InternetExplorer.application") oIE.navigate2(URL) oIE.visible=true IEBUSY(oIE) For Each objLINK In oIE.Document.Links If objLINK.InnerText = "ログイン" Then objLINK.Click Exit For End If Next

hirohiroct
質問者

お礼

回答ありがとうございます。 などご指摘のようにページを読み終わる前にクリックしていたり、マッチしていなければClickの行は実行されてないことになりますが、Clickの直前にメッセージボックスを入れると表示されるので、実行はされているように思えます。 というか、 新しいウィンドウでのリンクが開かれない状態で、現行のページに読み込むリンクのURLとキーワードにだけ変えて同じプログラムを実行してみると、ちゃんとページが開かれてくるので???になっています。 OSはXP、ブラウザはIE7なのですが、環境の問題でしょうか・・

関連するQ&A

  • リンク名が複数同じ名前あるとき

    リンク名をクリックさせたいのですが、うまくいかないので教えてください。 環境 OS XP VB2005 For Each anchor As HtmlElement In WebBrowser1.Document.Links If anchor.InnerText = "あああ" Then anchor.InvokeMember("click") Exit For End If Next 「あああ」がひとつしかない場合はクリックできるのですが、「あああ」が複数ある場合にうまくいきません。 2つ目の「あああ」クリックさせる方法があれば教えてください。 宜しくお願いいたします。

  • vb2010webページのリンクをクリック

    vb2010でwebページのリンクをクリックしたいのがうまくいきません。 「ホーム」などは選択することができるのですが、「翌月」などが選択できません。コードは以下のようになっています。どなたか教えていただけないでしょうか。 Dim objIE Dim objLINK objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'IEウィンドウを表示 objIE.Navigate2("http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=44&prec_ch=%93%8C%8B%9E%93s&block_no=47662&block_ch=%93%8C%8B%9E&year=2000&month=01&day=&view=p1") Do Until objIE.Busy = False Application.DoEvents() Loop For Each objLINK In objIE.Document.Links If objLINK.InnerText = "翌月" Then objLINK.Click() Do Until objIE.Busy = False Application.DoEvents() Loop Exit For End If Next

  • VBAにて、セルの内容と一致しない場合の処理

    VBAを独学で学んでいる者です。 実力・知識がないながらも検索エンジンなどを頼りに頑張っています。 しかしながらどうしてもわからない事があり、煮詰まってしまいましたので、質問させていただきました。 当方、VBAにてIEを操作し、セルの内容を自動入力していくプログラムを書いています。 以下に記述しているものや、「document.body.innertext」で取得したIEの情報と書き込みたいセルの内容が一致しない場合にエラーメッセージを表示したいのですが、どうもうまくいきません。 If~Thenなどを使うことで条件分岐できるのだとはおもうのですが、当方の記述ですと条件を無視(?)してElseに飛んでしまいます。 当方が記述している内容は以下です。 (Cells(1, 1)には文字列を入力しています。) ~ここから~ 'リンク情報からオブジェクトを探し.Clickする For n = 0 To objIE.document.Links.Length - 1 'リンク数分まわす Debug.Print objIE.document.Links(n).innertext 'デバックで表示する 'リンク先(.text)をチェックする(文字列比較する) If objIE.document.Links(n).innertext = ActiveSheet.Cells(1, 1).Text Then objIE.document.Links(n).Click '.Clickでクリックしてみた Exit For '見つかったので強制的にループを抜ける Else MsgBox "NG!!", vbExclamation Exit Sub End If Next ~ここまで~ Else MsgBox "NG!!", vbExclamation Exit Sub を消すと、「For n = 0 To objIE.document.Links.Length - 1 」がinnertextを取得し、Cells(1, 1)の内容を読み取りクリックを実行してくれるのですが、Elseを入れると、Cells(1, 1)の内容と一致しているにも関わらず、Elseへ移行し、NGのメッセージボックスが出てきます。 記述が間違っているのでしょうか? 何か他の記述がございますようでしたらご教授願えますでしょうか? 宜しくお願い致します。

  • 三菱東京UFJ銀行に自動ログインしたいのですが

    どうもうまくできません。 ログインボタンが押せません。 Sub tset() Dim objIE As Object Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop With objIE.document .all("KEIYAKU_NO").Value = "test" .all("PASSWORD").Value = "PASSWORD" End With For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerHTML Like "*alt=ログイン*" Then objIE.document.Links(i).Click Exit For End If Next i For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerText = "ログイン" Then objIE.document.Links(i).Click Exit For End If Next i End Sub でも、押せないのですが、ご教授いただけませんか? よろしくお願いします。

  • VBAでリンクを踏みたい

    とあるサイトにログインした後に、「このページを印刷する」というリンクをVBAでクリックしたいのですが ソースは <div class="section sideinfo"> <a href="#" class="print" onClick="JavaScript:openPrintWindow('CG017_001', 'CG018'); return false;">このページを印刷する</a> </div> こうなっています。 VBAコードで objIE.Document.all.Item("JavaScript:openPrintWindow('CG017_001', 'CG018')").Click をすると、「オブジェクト変数または With ブロック変数が設定されていません。」になります。 For i = 0 To objIE.Document.Links.Length - 1 'Debug.Print objIE.Document.Links(i).innerHTML If objIE.Document.Links(i).innerHTML = "このページを印刷する" Then objIE.Document.Links(i).Click Exit For End If Next i これで踏むことはできるのですが、 ソースから文字を探してそれをVBAコードにあてて踏むことはできないのでしょうか?

  • 2ページ目が表示されるまで待つには?

    target="_blank" で開かれるリンクで、開いた先が完全に表示されるまで待つにはどうすればよいでしょう? 例えば ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sub Sample() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://www.tagindex.com/html_tag/link/a_target.html" 'これは1ページ目を表示させるまで待つ Do Until objIE.Busy = False And objIE.readyState = 4: Loop For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerText = "新しいウィンドウで表示します" Then objIE.document.Links(i).Click 'ここで2ページ目を表示させるまで待つには? Exit For End If Next Set objIE = Nothing End Sub ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ という状態で、 objIE.document.Links(i).Clickを実行した後の表示を待つにはどうすればいいでしょう? (http://www.tagindex.com/html_tag/link/target_example.htmlのページです) objIEの値は、"http://www.tagindex.com/html_tag/link/a_target.html"のままなので、 新しくobjIEを作ればいいのでしょうか? ご回答よろしくお願いします。

  • 【VBA】IEのリンクを新しいタブで開く

    VBAでIEを制御しリンク(アンカー)<a href="***">を新しいタブで開くようにしたいのですが可能でしょうか? 仮にグーグルのトップページ(http://www.google.co.jp/)の『検索オプション』(http://www.google.co.jp/advanced_search?hl=ja)を新しいタブで開くとします 実際に開きたいリンクのURLは固定ではないためURLの指定では開けませんが、飛びたいリンクの文言(『検索オプション』)は固定です リンクに飛ぶ前に飛ぶ先のURLを取得する仕方か、Shift+Ctrl+クリックのようにリンクを新しいタブで開く方法を教えてください 一度普通にリンクに飛んでからURLを取得し、戻ってから新しいタブで開くぐらいしかできないのでしょうか? Sub 新しいタブで開く() Dim objIE As Object Dim objShell Dim URL As String Set objShell = CreateObject("Shell.Application") For n = objShell.Windows.Count To 1 Step -1 Set objIE = objShell.Windows(n - 1) If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then objIE.Navigate "http://www.google.co.jp/" Exit For End If Next Set objShell = Nothing objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "検索オプション" Then Obj.Click Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop URL = objIE.Document.URL objIE.GoBack Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate URL, CLng(&H800) Exit For End If Next End Sub よろしくお願いいたします

  • VBSでobjLINK.InnerTextの一部だ

    VBSでリンクをクリックしたいのですが、 某所からコピペしたVBSのスクリプトです。 これを実行すると、たしかに YAHOOのオークションに行きます。 ============================== Option Explicit Dim objIE Dim objShell Dim strBody Dim objLINK 'Shell.Application オブジェクトの作成 Set objShell = CreateObject("Shell.Application") 'IE を起動して Yahoo のトップページを開く Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'IEウィンドウを表示 objIE.Navigate2 "http://www.yahoo.co.jp/" 'Yahoo のページが起動する 'ページの読み込みが終わるまで待機する Do Until objIE.Busy = False '空ループだと無駄にCPUを使うので250ミリ秒のインターバルを置く WScript.sleep(250) Loop ' Yahoo トップページのオークションのリンクをクリックする For Each objLINK In objIE.Document.Links If objLINK.InnerText = "オークション" Then objLINK.Click Exit For End If Next ============================ 質問させていただきたいのは If objLINK.InnerText = "オークション" Then この部分が例えば「オークション」でなくとも「オークショ」のように アンカーテキストリンクの一部が同じだったら、いけるようにしたいのですが、 どうしたらよろしいでしょうか? 「オークション」 だったら 「オークショ*」 や 「*クション」 とかでもいけるのかなーとおもってたんですが、 全然わからないんです。 どうかよろしくお願い致します。

  • name テキスト 画像名等が無いリンクをクリック

    VBで特定のリンクをクリックしたく様々なソースを 見て似たような記述は数多く見かけたのですが、 私のクリックしたいリンクが特殊でどうもうまく クリック出来ません。 ■Visual Studio、Windowsフォームアプリケーション利用 ■クリックしたいリンクについて ・<li class="menu_cate"><a href="new.html" title="NEWページ"></a></li> 「リンク詳細」 リンク先は画像となっており、画像名がありません。 li class、a href それぞれの値(menu_cate、new.html)は、共にページ内では1つだけです。 上記のリンクをクリックしたいので、「menu_cate」、「new.html」、「NEWページ」のいずれかを 検知してクリックをしたいと思い下記を記述してみたのですがうまくいきません。 是非どなたかご教授くださいますようお願い致します。 Dim Element As HtmlElement = Nothing For Each Element In WebBrowser1.Document.All.GetElementsByName("A") If Element.InnerText = "NEWページ" Then Element.InvokeMember("Click") 'クリックする Exit For End If Next ※Element.InnerTextの部分は色々変えてみたのですが、 リンクできませんでした。

  • VBAでJAVAをコントロール

    javascriptのリンクが、<a href="javascript:void(0);">なんたらかんたら</a> であれば記載のソースが通じるのですが、 【今回の問題】 【html部分】 onclick="javascript:updateDisp();return false;" alt="なんたらかんたら"><input type="hidden" name="allupdate" value="なんたらかんたら"> 【javascriptの部分】 function updateDisp(){ update_flg = window.confirm("なんたらかんたら"); if(update_flg == true){ document.updateForm.submit(); } else{ alert("キャンセルしました。"); } とやられた途端に全く通じなくなりました。 どのように回避したらよいでしょうか。 【今回のではなく前回の(javascript:void(0);)成功分】 Private Sub CommandButton99_Click() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://xxxx/entry" Do While objIE.Busy = True DoEvents Loop Application.Wait (Now + TimeValue("00:00:03")) objIE.Document.all("ShopShopId").Value = Range("C8") objIE.Document.all("ShopPassword").Value = Range("C9") objIE.Document.forms(0).submit Application.Wait (Now + TimeValue("00:00:05")) For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "なんたらかんたら" Then Obj.Click Exit For End If Debug.Print objIE.LocationURL objIE.Navigate "xxxx/entry/entry_tops/all_update?prm=xxxxxxxxxxxxxxxxxxxxxxx" For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).href = "javascript:void(0);" Then Application.Wait (Now + TimeValue("00:00:05")) objIE.Document.Links(i).Click Application.Wait (Now + TimeValue("00:00:05")) Exit For MsgBox "ループ抜け" End If Exit Sub Next Next objIE.Quit End Sub 上記は【今回の問題】に通じません。 'objIE.Navigate.Document.updateForm.fireEvent ("なんたらかんたら") 'objIE.Document.Script.updateDisp "javascript:document.updateForm.submit(true);" など試行錯誤しておりますが、javascriptのポップアップが回避できません。 どなたか何とかご教授お願いいたします。