• 締切済み

VB.NETからWEBブラウザの操作について

VS2008 VB.NETにて開発を行っています。 プログラムからIEにて開いたWEBサイトに IDとパスワードを自動入力し自動ログインする処理を作成しています。 IDとパスワードの入力については、サンプルサイトなどからお借りして 以下のように作成し実現できました。 Dim ieDoc As mshtml.HTMLDocument = CType(IE.Document, mshtml.HTMLDocument) Dim elCol As mshtml.IHTMLElementCollection = CType(ieDoc.all, mshtml.IHTMLElementCollection) Dim usTxt As mshtml.HTMLInputTextElement = DirectCast(elCol.item("username"), mshtml.HTMLInputTextElement) Dim psTxt As mshtml.HTMLInputTextElement = DirectCast(elCol.item("password"), mshtml.HTMLInputTextElement) Dim elBtn As mshtml.HTMLButtonElement = CType(elCol.item("???"), mshtml.HTMLButtonElement) usTxt.value = "xxxxx" psTxt.value = "xxxxx" elBtn.click() ただログインボタンクリックの部分にnameのTAGがなく以下のような通常のクリック動作を行う ソースになっています。 ・ログインする対象のWEBサイトのソース <td colspan="2" class="white centerPosT"> <a href="#" onclick="javascript:login(); return false;"> <img src="/images/btn_login.gif" alt="ログイン" onmouseout="javascript:showUp(this)" onmousedown="javascript:showDown(this)" /> </a> </td> このような場合にログインをクリックさせるにはどのような方法で行えばよろしいのでしょうか?

  • C_S_C
  • お礼率33% (10/30)

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

または .Document.InvokeScript("login")

C_S_C
質問者

補足

回答ありがとうございます。 Document.InvokeScriptはWebBrowserコントロールのメンバでしょうか? 今回はWebBrowserコントロールを使用しないで直接IEを操作したいと考えています。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

.Document.GetElementsByTagName("A")(xx).InvokeMember("click") または .Navigate("javascript:login(); return false")

関連するQ&A

  • VB2010でGoogleを操作したい

    VB初心者です。さきほどの質問で、自分ができたところまでのソースを載せ忘れたので、改めて質問させていただきます。 今Visual Basic 2010 .Netで、 フォームに貼り付けたテキストボックスに入力した文字列を、 ボタンをクリックするとGoogleを立ち上げ、 そのGoogleのテキストボックスに先ほどフォームで入力した文字列を自動で入力、 入力後自動で検索のボタンをクリック するというのを作成中なのですが、Googleを立ち上げたところまではできたのですが、テキストボックスへ自動で入力するところでエラーが出て止まっています。 フォームのテキストボックスの文字列の取得は成功してまして、参照の追加COMで必要な参照はしています。 フォームでWebブラウザのツールを使わずに上記をするのは無理なのでしょうか? ご存知の方はご教示のほどよろしくお願いいたします。 下にソースを載せます。 Pubic Class Form1 Private WithEvents IE As SHDocVw.InternetExplorer Private myUrl As String Private Googletxt As String Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If Not (IE Is Nothing) Then IE.Quit() IE = Nothing End If myUrl = "http://www.google.co.jp/" IE = New SHDocVw.InternetExplorer Googletxt = Textbox1.Text IE.Visible = True IE.Navigate2(myUrl.ToString) End Sub Private Sub IE_DocumentComplete(ByVal pDisp As Object, ByRef URL As Object) Handles IE.DocumentComplete Invoke(New SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(AddressOf foo), pDisp, URL) End Sub Private Sub foo(ByVal pDisp As Object, ByRef URL As Object) Dim Doc0 As mshtml.HTMLDocument = CType(IE.Document, mshtml.HTMLDocument) Dim ElCo As mshtml.IHTMLElementCollection = CType(Doc0.all, mshtml.IHTMLElementCollection) Dim elem As mshtml.HTMLInputTextElement = DirectCast(ElCo.item("q"), mshtml.HTMLInputTextElement) elem.value = Googletxt '検索キーワードの入力用テキストボックスに書き込み Dim btn1 As mshtml.HTMLInputTextElement = DirectCast(ElCo.item("btnG"), mshtml.HTMLInputTextElement) btn1.click() '検索ボタンをクリック End Sub End Class エラー elem.value = Googletxt 上記のところで、"オブジェクト参照が オブジェクトインスタンスに設定されていません。" と出ています。

  • 起動済のIEから.NET FrameworkのHtmlDocumentを取得できますか?

    【環境・言語】Windows XP + IE6 + Visual Basic 2008 既に起動しているInternet ExplorerのオブジェクトをShellWindowsから探して、SHDocVw.InternetExplorer型の変数(objIE)に代入してあります。   Dim objIE As SHDocVw.InternetExplorer   'ShellWindowsから目的のIEオブジェクトを探してobjIEに代入 ここから、mshtml.HTMLDocumentを取得するところまでは分かります。   Dim objDoc As mshtml.HTMLDocument = CType(objIE.Document, mshtml.HTMLDocument) これではなくて、.NET FrameworkのHtmlDocumentクラス(System.Windows.Forms名前空間)のオブジェクトを取得することはできるでしょうか? ↓のように無理やりやってみたら、   Dim objDoc2 As System.Windows.Forms.HtmlDocument = CType(objIE.Document, System.Windows.Forms.HtmlDocument) ↓のようなエラーが出ました。   System.InvalidCastException はハンドルされませんでした。   Message="型 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス型 'System.Windows.Forms.HtmlDocument' にキャストできません。COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。ただし、基になる COM コンポーネントがインターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、インターフェイスにキャストすることができます。" mshtml.HTMLDocumentを使ってHTMLを解析していくと、COMオブジェクトの解放が大変そうなので、できれば.NET Frameworkの中で操作したいと思っています。逆(.NET Framework→COM)はHtmlDocument.DomDocumentで簡単に出来るようですが、COMから.NET Frameworkへの変換は出来ないんでしょうか?

  • AxWebBrowserで開いたWebページを操作したいのですがコンボ

    AxWebBrowserで開いたWebページを操作したいのですがコンボボックスの操作が上手くいきません。 Dim doc As mshtml.HTMLDocument doc = AxWebBrowser1.Document 'テキストボックス doc.all.item("text").innertext = "あああ" 'ラジオボタン doc.all.item("radio", 0).Checked = True テキストへの文字列の挿入とラジオボタンの制御はこれでできました。 環境はVB.NET 2005です。 どうか、よろしくお願いします。

  • vba ie操作 ボタンを押したい(2)

    https://ca.omc-card.co.jp/member/omcplus_login.html のサイトにログインしたいのですが、ログインボタンが押せません。 ソースは、 ********************************************************************************** <FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value="">     ~~~省略~~~ <TABLE border="0" cellspacing="0" cellpadding="5" class="tab_button_bottom15"> <TR> <TD><A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A></TD> </TR> </TABLE> </FORM> ********************************************************************************** です。 --------------------------------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://ca.omc-card.co.jp/member/omcplus_login.html" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.forms(0).Item("sid_input").Value = "×××" objIE.Document.forms(0).Item("pw_input").Value = "×××" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop 'objIE.Document.forms(1).submit 'エラーになる objIE.Document.all.Item("document.form1").Click 'エラーになる objIE.Document.forms(0).getElementsByTagName("input")(0).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("input")(1).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("document.form1")(1).Click 'エラーになる objIE.Document.forms(1).getElementsByTagName("input")(1).Click 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------------------------------- テキストにIDとPWを入れるところまでは出来たのですが、 ログインボタンを押すことができません。 すいませんがご教授ご回答よろしくお願いしますm( )m

  • VB.netで、動的な型変換を行いたいのですが、、、(CTypeではできない?!)

    VB.netで、 動的な型変換を行いたいと思っています。 イメージ的には、 CType(hogehoge,String)やCType(hogehoge,Integer) CType(hogehoge,MyClassHogehoge) ではなく、 CType(hogehoge,"String"),CType(hogehoge,"Integer") CType(hogehoge,"MyClassHogehoge") というように、 その場の変数で決まる型変換です。 Dim a as MyClassA Dim b as Object とあって CType(b,a)というような変換をしたいのです。 (が、CTypeやDirectCastの第二引数は、  定義された型名しか受け付け無いようです。) ----- 実際には、 mytype.InvokeMember("変数名", BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance, Nothing, "インスタンス", New [Object]() {"設定値"}) という処理をやる上で、 "設定値"が文字列(String)である場合、 "変数名"で、動的にアサインされた変数の型(たとえばMyClass)に型変換しないと、 値が設定できないためです。 (CType("設定値","インスタンス"."変数名")というようなこと必要となってくるはずです、、、) ----- 上記手順が、可能なのかどうか、 まったくのナンセンスなのかどうかも わかっていないので、 一言でもいただけるとたすかります。。。 どうぞよろしくおねがいいたします。

  • ブラウザのフォームのエレメント番号を取得したいです。VB.NET

    AxWebBrowserに表示したウェブページのJavaScriptフォームの エレメントのIDを指定して、番号を取得したいです。 Dim a As String For i As Integer = 0 To 200 a = AxWebBrowser1.Document.forms(0).Elements(i).id Console.WriteLine(i & " - " & a) Next 上記の方法で0~200までのIDを取得する方法で 番号とIDを知ることが出来るのですが、 IDの種類が多数ある場合、この方法だと不都合が多いので、 単純にIDを指定して番号を知る方法を探しています。 (IDは事前に分かっているので) Dim a As mshtml.HTMLElementCollection Dim a1 As mshtml.HTMLInputElementClass a = AxWebBrowser1.Document.forms(0) Dim i As Integer a1 = a.namedItem("title") i = a1.~~~~~ 上記のような方法で”title”が何番目なのか調べたいのですが、 ~~~~~~部分を色々試してみたのですが、どれも正しい動作にはなりませんでした。 このような方法でエレメントのIDから番号を取得する方法がありましたらご教授頂けると助かります。

  • IE操作で別タブ表示のHTMLソースの取得方法は?

    VB.NET(VB 2010 Express)でIE9をWebBrowserコントロールではなく直接操作しています。 先にここで、あるサイトのトップページを表示し、それにユーザID、パスワードを入力し、ログオンボタンをクリックして次のページを別タブで表示する方法を教えて頂きました。 そこで、別タブに表示した次ページのHTMLソースを取得する方法として、下記のコードを教えて頂きました。 Dim objIE As Object objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate("http://login.yahoo.co.jp/") Do While objIE.Busy System.Threading.Thread.Sleep(500) Loop objIE.Document.login_form.login.Value = "xxxxx" 'ユーザIDを入力 objIE.Document.login_form.passwd.Value = "yyyyy" 'パスワードを入力 objIE.Document.login_form.target = "_blank" '別ページに表示 objIE.Document.login_form.submit() Dim Shell As Object Dim win As Object Dim newObjIE As Object Shell = CreateObject("Shell.Application") For Each win In Shell.Windows If TypeName(win.document) = "HTMLDocument" Then 'このif文がTrueにならない If win.document.URL = "http://yahoo.co.jp" Then newObjIE = win Exit For End If End If Next しかし、コメントのあるif文がTrueにならないようです。修正方法を教えて頂きたくよろしくお願い致します。

  • VB.NETで出来てC#で出来ない???

    VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。 VSのバージョンは2008です。 やりたいことは 『param.Item("AAA") = "111"』 このように書けるクラスを作りたいのですが、 VBで出来てC#では出来ないのでしょうか? イメージとしてはプロパティにメソッドをくっつけたようなクラス? C#ではこのように書くとエラーになります。 どのようにしたらいいでしょうか? public string Item(string Key) {  set { _param[Key] = value; } } VB Dim param As New Param() param.Item("AAA") = "111" ----Paramクラス---- Imports System.Text Public Class Param Private _Hash As New Hashtable Default Public Property Item(ByVal Key As String) As String Get Return _Hash(Key) End Get Set(ByVal value As String) _Hash(Key) = value End Set End Property End Class ---------

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub ie_test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.navigate "処理したいページ" 'ページの表示待ち While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer Dim wait_time As Date Dim yCNT As Long Dim i As Integer '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'リンクの貼ってある画像をクリック For i = 0 To objIE.document.images.Length - 1 If InStr(objIE.document.images.Item(i).outerHTML, "image/btn131b1.gif") > 0 Then objIE.document.images.Item(i).Click End If Next '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '新しいウィンドウのログインボタンを押す Dim objINPUT As Object 'Inputタグ格納用 For Each objINPUT In newIE.document.all.tags("INPUT") If objINPUT.Value = "ログイン" Then objINPUT.Click Exit For End If Next '調べる項目 For yCNT = 3 To 1002 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける 'ページが表示されたので処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click ※ここでオブジェクト変数。。。のエラーが発生する※ '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop '表示されたウインドウからデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIEを閉じる newIE.Quit Set newIE = Nothing '前のIEを閉じる objIE.Quit Set objIE = Nothing Next yCNT End Sub 初心者なので色々調べたのですがわかりませんでした。。。

  • フリーズする原因

    参照設定で[Microsoft HTML Object Library] Sub test1() Dim html As MSHTML.HTMLDocument Set html = New MSHTML.HTMLDocument Dim document As MSHTML.HTMLDocument Set document = html.createDocumentFromUrl("http://www.goo.ne.jp/", vbNullString) ' ダウンロード待ち Do While document.ReadyState <> "complete" Loop ' 結果出力 Debug.Print document.Body.innerHTML Set html = Nothing Set document = Nothing End Sub このコードを実行したいのですが ステップインして行かないとフリーズしてしまいます。 「ダウンロード待ち」の部分で無限ループです。 なぜでしょうか? あと、ステップインで実行したとしても 「このページには、セキュリティの危険性がある可能性があります。続行しますか?」 が毎回出てくるのですが、 非表示にするかvbaで「はい」にさせる方法はありますか?