- 日時: 2013/02/15 08:10
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[インターネット][][] * * キーワード:ログイン,自動的に,IE,ボタンをクリック,テキスト入力,submit, * *********************************************************************************** '================================================================================== '投 稿 日:2012.08.24 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:WebBrowserを使って通販サイトへのログイン例 '動作確認:WindowsVista/7 VB2010(VS2010 Pro) Framework 4 / ターゲットCPU:X86 IE 8.9 '[Option Compare Text][Option Explicit On][Option Infer On][Option Strict On]で設定 '==================================================================================
Form に WebBrowser コントロール 1個 と Button コントロールを2個貼り付けて 下記コードを試して見て下さい。
Public Class Form1
Private myUrl As Uri Private SNo As Integer
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _ Handles WebBrowser1.DocumentCompleted
'目的のサイト以外を除外する(サイトにより不要な場合や仕様によりじゃまな場合もあります。) '都度 myUrl に入る url を入れ替える必要があります。 ' Debug.Print(e.Url.ToString()) のようにして調べて見ればここを通るURLが解ります。
If Not TypeName(sender) = "WebBrowser" Or e.Url <> myUrl Then Exit Sub End If
With WebBrowser1 Dim elem As HtmlElement = Nothing
If SNo = 1 Then '楽天の場合 '下記の設定に関しては、下記のサンプルを参考にして調べて下さい。 'http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=313 'http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=314
.Document.GetElementById("userid").SetAttribute("Value", "hogehoge@hoge.sakura.ne.jp") .Document.GetElementById("passwd").SetAttribute("Value", "Password") '下記の設定でログインボタンをクリックした方がサイトの書き直し等に対応し易いので。 For Each elem In .Document.GetElementsByTagName("input") '要素=input の Type 属性 と value 属性の値を照合する If elem.GetAttribute("Type") = "Submit" And elem.GetAttribute("value") = "ログイン" Then 'ログイン後続けて同様の作業をする場合は次に表示される画面のURLを指定する事 'myUrl = New System.Uri("https://www.hogehoge.jp") 'SNo = 4 とかしてそこで次の動作を書く事 elem.InvokeMember("Click") End If Next End If
If SNo = 2 Then 'そのまんま通販サイトの場合 'パスワード等が間違っている場合、無限ループに陥るので。 If .Document.Body.InnerText.IndexOf("ログインに失敗しました。") >= 0 Then Exit Sub End If
'ログイン中の場合は、同じ URL でも違う画面が表示されエラーが発生するので。 If .Document.Body.InnerText.IndexOf("不正なアクセスです。") >= 0 Then 'エラーの場合表示する画面のURLを指定する myUrl = New System.Uri("https://www.sonomanma.co.jp") WebBrowser1.Navigate(myUrl) Exit Sub End If
'下記の設定に関しては、下記のサンプルを参考にして調べて下さい。 'http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=313 'http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=314
.Document.GetElementById("textfield").SetAttribute("Value", "hogehoge@hoge.sakura.ne.jp") .Document.GetElementById("textfield2").SetAttribute("Value", "Password")
'下記のようにしてログインボタンをクリックした方がサイトの書き直し等に対応し易いので。 For Each elem In .Document.GetElementsByTagName("input") '要素=input の Type 属性 と value 属性の値を照合する If elem.GetAttribute("Type") = "Submit" And elem.GetAttribute("value") = "ログイン" Then elem.InvokeMember("Click") End If Next End If
End With End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click '楽天の通販サイトの場合 SNo = 1 WebBrowser1.ScriptErrorsSuppressed = True myUrl = New System.Uri("https://www.rakuten.co.jp/myrakuten/login.html") WebBrowser1.Navigate(myUrl) End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 'そのまんま通販サイトの場合 SNo = 2 WebBrowser1.ScriptErrorsSuppressed = True myUrl = New System.Uri("https://www.sonomanma.co.jp/login.php") WebBrowser1.Navigate(myUrl) End Sub
End Class
'そのまんま通販サイトのような場合、特別な設定になっており、同じ URL で表示しても条件により '表示される画面が違うような場合があるので、事前にどのようになっているのかをよく確かめておいて下さい。 '(表示された画面のソースコード等を見るなりして)
' 下記のようにしてログインボタンをクリックする事もできますが、サイト等を書き直しされた場合に ' 影響を受けやすいので、コードを変更する等の処置が多く発生する可能性がある。
' .Document.Forms(1).InvokeMember("Submit") ' .Document.GetElementsByTagName("input").Item(4).InvokeMember("Click") ' .Document.All.GetElementsByName("Submit").Item(0).InvokeMember("click")
|