- ベストアンサー
VBで特定のリンクをクリックしたく様々なソースを見て似たような記述は数多く見かけたのですが、私のクリックしたいリンクが特殊でどうもうまくクリック出来ません。
- Visual Studio、Windowsフォームアプリケーションを利用して特定のリンクをクリックしたいです。リンク先は画像であり、画像名が存在しません。リンクの属性値が「menu_cate」「new.html」という値である場合にクリックを実行したいです。
- VBを使用して特定のリンクをクリックしたいですが、リンク先の要素は画像であり、画像名がないため困っています。リンクの属性値が「menu_cate」「new.html」という値である場合にクリックを実行したいです。
- Visual Basicを使用して特定のリンクをクリックしたいです。リンク先は画像であり、画像名が存在しないため、クリックする方法がわかりません。リンクの属性値が「menu_cate」「new.html」という値である場合にクリックを実行したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
If Not TypeName(sender) = "WebBrowser" Or e.Url <> myUrl Then Exit Sub End If ID や パスワードを入力している画面とリンクをクリックしたい画面は違いますよね。 .Document.All.GetElementsByName("submit")(0).InvokeMember("click") 上記を実行したら、どこか違う URL の画面に移動しませんか? (ここまではできているのですよね。) その時に myUrl がそのままなら、 For Each Element In WebBrowser1.Document.GetElementsByTagName("A") は実行されませんよ。 myUrl="下記をクリックしたら表示される URL" に書き換えておかないと .Document.All.GetElementsByName("submit")(0).InvokeMember("click")
その他の回答 (1)
- vbhanatyan
- ベストアンサー率79% (70/88)
>For Each Element In WebBrowser1.Document.All.GetElementsByName("A") ではなく For Each Element In WebBrowser1.Document.GetElementsByTagName("A") なら If Element.InnerText = "new.html" Then で取得できるはずですが。 もし取得できないようなら、その URL を教えて下さい。こちらでも試してみます。 ※ ご使用の詳しい環境を書くようにして下さい。 (コードから .NET 系のバージョンとは推測できるのですが、ここは、.NET 系なら どのバージョンでもVB.NET と書く人が多いので、本来は、VB.NET と書くと VB.NET 2003を指しVB2005 以降と区別されます。) 因みに、VB2010 / IE 9 / Windows 7 で動作確認
お礼
ご回答いただきありがとうございます。
補足
こんなにもお早いご回答をいただきまして 誠にありがとうございます。 本当に感謝しております。 同時に小生の薄い知識が原因で環境の詳細を 書かずに申し訳ございませんでした。 小生の分かる範囲で記載させて頂きます。 記載方法に誤りがあるかもしれませんが、 ご容赦ください。 ご指導いただけますと幸いでございます。 ■環境 Windows7 IE9 Visual Studio Ultimate 2012 Microsoft Visual Basic 2012 Microsoft .NET Framework Version 4.5.5 こちらで合っていますでしょうか? 尚、URLにつきましては先方にも ご迷惑が掛かる可能性もございますので、 控えさせて頂けますと幸いでございます。 ■全コード Public Class Form1 Private myUrl As Uri Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load WebBrowser1.ScriptErrorsSuppressed = True myUrl = New System.Uri("http://hogehoge.com") WebBrowser1.Url = myUrl End Sub Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _ Handles WebBrowser1.DocumentCompleted If Not TypeName(sender) = "WebBrowser" Or e.Url <> myUrl Then Exit Sub End If With WebBrowser1 .Document.GetElementById("email").SetAttribute("Value", "hogehoge") .Document.GetElementById("password").SetAttribute("Value", "hogehoge") .Document.All.GetElementsByName("submit")(0).InvokeMember("click") End With Dim Element As HtmlElement = Nothing For Each Element In WebBrowser1.Document.GetElementsByTagName("A") If Element.InnerText = "new.html" Then Element.InvokeMember("Click") 'クリックする Exit For End If Next End Sub ■行いたいこと Windowsフォームアプリケーションで 1)Basic認証?のHPにアクセス 2)ID、PASSを自動入力 3)特定のリンクをクリック ← 今ここで悩んでます。 度々のご質問で誠に申し訳ございませんが、 知り得る範囲でも結構でございますので、 何卒、お力をお貸し頂ければと思います。
お礼
ご指摘いただきありがとうございます。
補足
再度のご回答誠にありがとうございます。 はい、ID、パスワードを入力している画面と クリックしたい画面は違いまして、 .Document.All.GetElementsByName("submit")(0).InvokeMember("click") を実行しますと違うURLに移動します。 昨日、色々 myUrl="クリックしたら表示される URL" にするために孤軍奮闘しておったのですが、 myUrlに新しいUrlを代入することがうまくいきません。 と言いますよりも、デバッグするとエラー表示には ならないのですがログインした状態で何も動かず、 といった状況です。 一般的なVBの参考書も購入し1から見直しているのですが、 本当に簡単なイベントハンドラや1つのみの プロシージャの処理などは多少理解は 出来るのですが、今回のような連続して処理? するような記述方法がほとんど掲載されておらず ググってみても出来ませんでした。 普通の方であれば、1つ1つの処理を理解すれば、 合わせて総合的なコードが書けるのかと思いますが、 私はそこの理解がとても低いのだと感じます。 申し訳ございません。 myUrl に新たにUrlを代入し、クリックさせるには プロシージャ内での記述方法は最初の処理の Private Sub Form1_Load とは違うと思うのですがどのようなプロシージャに なるのでしょうか? 何度もお伺いし誠に申し訳ありませんが、 何卒、ご教授いただけますと幸いでございます。