リンク名が複数同じ名前あるとき、リンク名をクリックさせる方法

このQ&Aのポイント
  • リンク名が複数同じ名前の場合、クリックさせる方法を教えてください。
  • VB2005の環境で、リンク名が複数同じ名前の場合にうまくクリックできない問題が発生しています。解決方法を教えてください。
  • OSがXPの環境で、WebBrowser1.Document.Linksを使用してリンク名をクリックさせたいのですが、同じ名前のリンクが複数ある場合にうまく動作しません。対処方法を教えてください。
回答を見る
  • ベストアンサー

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

リンク名をクリックさせたいのですが、うまくいかないので教えてください。 環境 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つ目の「あああ」クリックさせる方法があれば教えてください。 宜しくお願いいたします。

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

  • ベストアンサー
回答No.3

失礼しました、同じ名前が2個あるとの事だったのでGetElementsByName を使ったのですが それなら、下記のようにして取得するしかないですね(実際のサイトのソースが解れば違う答えも!)   Dim elem As HtmlElement = Nothing, n As Integer = 0   For Each elem In WebBrowser1.Document.GetElementsByTagName("A")     If elem.InnerText = "あああ" Then       n += 1       If n = 2 Then         elem.InvokeMember("Click") 'クリックする         Exit For       End If     End If   Next

heibondesu
質問者

お礼

お陰様で実行することができました。 ありがとうございました。

その他の回答 (2)

回答No.2

失礼しました、先の回答は無視して下さい。 VB2005 なら  WebBrowser1.Document.All.GetElementsByName("あああ").Item(1).InvokeMember("Click") ですね。

heibondesu
質問者

補足

ご回答ありがとうございます。 {"'1' の値は 'index' に対して有効ではありません。'index' は 0 と -1 の間でなければなりません。 パラメータ名: index"} となりうまくいきませんでした。 クリックさせたいソースは以下の通りです。 <tr valign="top"> <td width="9"><img src="https://image.xxxxx.xxxxxx.co.jp/acom/pc/img/com/w05s04_red.gif" alt="" height="9" width="9"></td> <td><font size="-1"><a href="DI01P004_005?genreId=1040006250&d_id=c326caa9069334a8d1f66e7cc5344789#03">あああ</a></font></td> </tr> もし、おわかりでしたら教えていただけませんか?。

回答No.1

WebBrowser1.Document.All.GetElementsByName("あああ").Item(1).Click 又は WebBrowser1.Document.GetElementsByName("あああ").Item(1).Click でできたかと。

関連するQ&A

  • 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の部分は色々変えてみたのですが、 リンクできませんでした。

  • 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

  • C#でブラウザ作成、mixi上で自動運転(ボタンクリック)ができません。

    勉強のためC#でブラウザ作成を行っています。 (Microsoft Visual Studio C# 2008 Express Edition) まずはmixiのログイン画面で自動ログインするブラウザを作成しています。 URLはここです。 http://mixi.jp/home.pl メールアドレスやパスワードは入力できますが、「ログインボタン」はIDがないため、私の知識ではクリックできません。 記述したコードは、以下になります。 //ログイン用のEメールアドレスを入力 HtmlElement LoginId = this.webBrowser1.Document.GetElementById("email"); LoginId.InnerText = "aaaaaaa@yahoo.co.jp"; //パスワードを入力 HtmlElement LoginPass = this.webBrowser1.Document.GetElementById("password"); LoginPass.InnerText = "password_abc"; //チェックボックス(次回から自動でログイン)をチェック HtmlElement CheckBox = this.webBrowser1.Document.GetElementById("sticky"); LoginButton.InvokeMember("click"); //ここに「ログイン」ボタン押下処理を追加予定 解決方法,参考になるサイト,その他ご意見等、ご助言をお願いします。

  • vb2005 webbrowserでリンクをクリックした後の表示待ちの方法

    VB2005を勉強中の者です。 WebBrowser1.Navigateを使ってwebページを開いた際は下記while文での表示待ちが機能するのですが、ページ表示後、さらにInvokeMemberを使って先のページにクリックで進んだ後では同一の表示待ち部分がうまく機能せずにそのまま次の処理へと進んでしまいいます。 どこに問題があるのか分からず困っております。どなたか助けていただけませんでしょうか? WebBrowser1.Navigate("https://yahoo.co.jp") '↓ここは機能します While WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Application.DoEvents() End While WebBrowser1.Document.GetElementsByTagName("a").Item(15).InvokeMember("click") '↓これが機能しなくて困っています! While WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Application.DoEvents() End While '↓目的 TextBox1.Text = WebBrowser1.Document.Body.InnerText

  • WebBrowser 複数のsubmit

    VB初心者です ご指導の程宜しくお願い致します visual basic 2008 でWebBrowserにて webページに複数のname属性のないsubmitがある場合どうやって選択して押す動作をさせるのでしょうか??? 下記:webのソース <input type="submit" value="変更する" class="formBt01" /> <input type="submit" value="戻る" class="formBt02" /> どちらかを選択できるようにしたいです 過去にも同じような質問がありましたが回答の通り試しましたが うまくいきません 自分が試したもの WebBrowser1.Document.Forms(0).InvokeMember("submit") もちろんwebソースにsubmitが二つあるので、動作しません WebBrowser1.Document.Forms(1).InvokeMember("submit") フォームで選ぶのかなと試しましたが何も動作しません WebBrowser1.Document.Forms("ボタンのname").InvokeMember("click") ボタンの名前がわからないので、これは使えず… どなたかご教授お願いします

  • VB2005、WebBrowserにてログインが成功したか失敗したかを判断

    お世話になっております。 VB2005ユーザーです。 WebBrowserを使用し、windowsフォームに入力した内容を元にログインし、ログインが成功したか失敗したかを判断したいのです。 With WebBrowser1 .Navigate("ログインしたいURL") Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete '読み込み終わるまで待つ System.Windows.Forms.Application.DoEvents() Loop .Document.All.GetElementsByName("ID")(0).InnerText = ID.Text .Document.All.GetElementsByName("パスワード")(0).InnerText = パスワード.Text .Document.Forms(0).InvokeMember("submit") という物を使い、その後にログイン成功か失敗かを判断するために、 If .Document.Body.Innertext = "ログイン失敗" Then MsgBox("だめ") Exit Sub Else MsgBox("OK") Exit Sub End If というコードを使ってみたのですが、Innertextの情報を読み取っていないのか、Else MsgBox("OK")に飛んでしまいます。 Navigateにて進んだ先のHTML情報(Innertext)と、コチラが指定したい情報が一致しているかの判断はどのようなコードを記述すればいいのでしょうか?

  • 【Vista+IE7】新しいウィンドウで開くリンクをプログラムからのクリックで開けない

    例えば、asahi.comのホームページの左下の方に、CNNへのリンクがあり、マウスでクリックすると、新しいウィンドウで開きます。HTMLは以下の通りです。 <a href="http://www.cnn.co.jp/" target="_blank">CNN</a> これをVista+IE7の環境で、Excel 2002のVBAプログラムでクリックすると、「キキッ」とブレーキ音のような音がしてリンクが開けません。 プログラムは以下の通りです(話を簡単にするために、保護モードとポップアップブロックは無効にしています)。ここではVBAの例ですが、VB.NET(2008)でも結果は同じです。 (インデントが上手くいかないので見にくくてすみません。) =================================================== Sub test() Dim IE As Object Dim Anchor As Object 'asahi.comを開く Set IE = CreateObject("InternetExplorer.application") IE.Visible = True IE.navigate "http://www.asahi.com/" '更新終了まで待つ Do While IE.Busy DoEvents Loop Do While IE.Document.ReadyState <> "complete" DoEvents Loop 'CNNへのリンクを探す For Each Anchor In IE.Document.GetElementsByTagName("A") If Anchor.InnerText = "CNN" Then Exit For End If Next Anchor 'リンクをクリック Anchor.Click End Sub =================================================== 同じプログラムを、Windows XP+IE6の環境で実行すると、問題なく別ウィンドウでリンクが開きます。 何かセキュリティの設定のような気がするのですが、関係ありそうなセキュリティの設定を緩めてみても結果は同じでした。 なお、リンク(<A>)だけでなく、フォームのボタンをクリックすると別窓が開くような場合でも、同じように開けません。 解決策がお分かりの方、ぜひ教えてください。

  • WebBrowser 内のボタンをクリックし、引数を渡したい。

    WebBrowser 内のボタンをクリックし、引数を渡したい。 WebBrowser コントロールを使用していて Windows アプリからページ内のボタンをクリックする方法について質問です。 以下のボタンが html で定義されているとして、 <input type = "button" id = "button1" onclick="javascript:foo();" /> HtmlElement element = null; element = webBrowser1.Document.GetElementById("button1"); element.InvokeMember("click"); こうすると、javascript の foo() が実行されます。 本題はここからなんですが、 この関数fooに引数を渡したいのです! 例えばfooの定義を var foo=function(arg) { alert(arg); } として、アプリ側から、 element.InvokeMember("click","this is test"); のようにすれば動くかと思ったのですが、だめでした。 方法をご存知のかた、ご教授願います!

    • ベストアンサー
    • HTML
  • 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コードにあてて踏むことはできないのでしょうか?

  • 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のメッセージボックスが出てきます。 記述が間違っているのでしょうか? 何か他の記述がございますようでしたらご教授願えますでしょうか? 宜しくお願い致します。