- PR -

AxWebBrowserコントロール表示について

1
投稿者投稿内容
えんどっちゃま
会議室デビュー日: 2009/03/17
投稿数: 3
投稿日時: 2009-03-17 17:37

分類:[.NET 全般] 

いつも参考にさせて頂いてます。
現在VB2008の環境で、yahoo自動ログインのプログラムを作成しようとしています。

コードは以下の通りです。テキストボックスにID、パスワードを入力後自動ログインは成功しました。
    
    Dim objeBrowser As New SHDocVw.InternetExplorer()
Dim iCol As mshtml.IHTMLElementCollection
Dim iEle As mshtml.IHTMLElement
Dim sString As String
Dim sID As String 'Yahoo! JAPAN ID
Dim sPass As String 'パスワード

sID = TextBox1.Text
sPass = TextBox2.Text

objeBrowser.Visible = True
objeBrowser.Navigate("https://login.yahoo.co.jp/config/login_verify2?.src=ym", Nothing, Nothing, Nothing, Nothing)


Do
Loop Until Not objeBrowser.Busy
Dim HTMLDoc As mshtml.HTMLDocument

Do
Loop Until Not objeBrowser.Busy

HTMLDoc = objeBrowser.Document
iCol = HTMLDoc.getElementsByTagName("input")
'Yahoo! JAPAN ID============================
For Each iEle In iCol
If Not iEle.getAttribute("name") Is Nothing Then
sString = iEle.getAttribute("name").ToString
If sString = "login" Then
iEle.setAttribute("value", sID)
Exit For
End If
End If
Next
'パスワード=================================
For Each iEle In iCol
If Not iEle.getAttribute("name") Is Nothing Then
sString = iEle.getAttribute("name").ToString
If sString = "passwd" Then
iEle.setAttribute("value", sPass)
Exit For
End If
End If
Next
'ログイン====================================

For Each iEle In iCol
If Not iEle.getAttribute("type") Is Nothing Then
sString = iEle.getAttribute("type").ToString
If sString = "image" Then
sString = iEle.getAttribute("value").ToString
If sString = "ログイン" Then
iEle.click()
Exit For
End If
End If
End If
Next
Do
Loop Until Not objeBrowser.Busy

しかし上記のコードで実行すると、新規にIEを開いてログインしてしまいます。
AxWebBrowser1コントロール等を使用して、フォーム上に同様の処理を表示させたいのですがうまくいきません。

下記コードを実行しても入力前のログイン画面が表示されるのみです。
AxWebBrowser1.Navigate2("https://login.yahoo.co.jp/config/login_verify2?.src=ym", Nothing, Nothing, Nothing, Nothing)

新規にIEを開くことなく、webBowser上に処理後の画面を表示させるにはどうしたらいいでしょうか?
VBをほとんど初心者で、大雑把な質問で申し訳ないのですが何卒ご教授の程よろしくお願いします。


ヴァン
常連さん
会議室デビュー日: 2008/03/04
投稿数: 28
投稿日時: 2009-03-17 18:35
>しかし上記のコードで実行すると、新規にIEを開いてログインしてしまいます。

普通のWebBrowserコントロールではだめなんですか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2009-03-17 21:12
引用:

えんどっちゃまさんの書き込み (2009-03-17 17:37) より:
しかし上記のコードで実行すると、新規にIEを開いてログインしてしまいます。
AxWebBrowser1コントロール等を使用して、フォーム上に同様の処理を表示させたいのですがうまくいきません。


私の環境(Visual C# 2008 + Windows XP + IE7.0)でほぼ同じようなコードで試してみたが、おそらくおっしゃっているであろうことが再現できません。
(なお、私は VB2008 を知らないので、提示されたコードを使わず、自前で作ったコードで試しました。ID、パスワードの入力は省略しました。ただし "ログイン" の image を click するコードは再現したつもりです。)

私は、フォームの上に AxSHDocVw.AxWebBrowser という型の axWebBrowser1 というインスタンスを貼っていますが、フォーム内のこの axWebBrowser1 の中で画面が遷移します。IE のウィンドウが新たに現れることはありませんでした。
ヴァン
常連さん
会議室デビュー日: 2008/03/04
投稿数: 28
投稿日時: 2009-03-18 10:33
IE(WebBrowswerコントロールを含む)を制御する場合、
OSがXPとVistaでも変わってきます。

OSは何でしょうか?
えんどっちゃま
会議室デビュー日: 2009/03/17
投稿数: 3
投稿日時: 2009-03-18 14:44
みなさまへ

すいません。解決しました。
AxWebBrowser1コントロールをフォーム起動時に生成させているにも関わらず、
下記のようなインスタンスを作成しまっていることに問題がありました。
Dim objeBrowser As New SHDocVw.InternetExplorer()

objeBrowser⇒AxWebBrowser1と読み替えることで無事WebBrowswer上にyahooのログイン画面を表示させることができました。

以下がソースになります。

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim iCol As mshtml.IHTMLElementCollection
Dim iEle As mshtml.IHTMLElement
Dim sString As String
Dim sID As String 'Yahoo! JAPAN ID
Dim sPass As String 'パスワード


sID = TextBox1.Text
sPass = TextBox2.Text

AxWebBrowser1.Visible = True


iCol = AxWebBrowser1.Document.getElementsByTagName("input")
'Yahoo! JAPAN ID============================
For Each iEle In iCol
If Not iEle.getAttribute("name") Is Nothing Then
sString = iEle.getAttribute("name").ToString
If sString = "login" Then
iEle.setAttribute("value", sID)
Exit For
End If
End If
Next
'パスワード=================================
For Each iEle In iCol
If Not iEle.getAttribute("name") Is Nothing Then
sString = iEle.getAttribute("name").ToString
If sString = "passwd" Then
iEle.setAttribute("value", sPass)
Exit For
End If
End If
Next
'ログイン====================================

For Each iEle In iCol
If Not iEle.getAttribute("type") Is Nothing Then
sString = iEle.getAttribute("type").ToString
If sString = "image" Then
sString = iEle.getAttribute("value").ToString
If sString = "ログイン" Then
iEle.click()
Exit For
End If
End If
End If
Next
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


AxWebBrowser1.Navigate2("https://login.yahoo.co.jp/config/login_verify2?.src=ym", Nothing, Nothing, Nothing, Nothing)

End Sub
End Class


お騒がせしてすいません。今後ともよろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)