VBAについて質問です。


現在 objIE.document (Document.Forms)を使用して、フォームにデータを入力し、ページにログインしようと考えています。

ログインしようと考えているのはヤフオクのページで

https://login.yahoo.co.jp/config/login?.src=auc&.intl=jp&.pd=&.partner=&.protoctl=&.done=http%3A//auctions.yahoo.co.jp/jp

になります。

objIE.document.all.login.Value = "自分のID"
objIE.document.all.passwd.Value = "自分のPW"

objIE.document.all.login_form.Click

として、ログインしようとしたのですが、出来ませんでした。

多分、問題はSubmitの所のnameがわからない為、ボタンを押すことが出来ないようになっているからだと思うのですが、
お手数をおかけしますが、ヤフオクのログインページでIDとPWを入力した後のログインボタン処理をするにはどうすればいいかを知っている方おりましたらご回答いただけないでしょうか?

お手数をおかけしますがよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/12/11 10:17:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:HALSPECIAL No.2

回答回数407ベストアンサー獲得回数86

ポイント100pt

再回答ですみません。

最初の回答はめんどくさいのと好みで型指定なしとしましたが、

できれば参照設定から、

「Microsoft Internet Controls」と

「Microsoft HTML Object Library」

をチェックして、

型指定で開発しることをお勧めします。

理由は、objIE.

とかしたときに、インテリセンス(入力候補)が機能し、スペルミスを防止できたり、

そのオブジェクトがどのようなメソッド、プロパティを持っているか知ることが

できるからです。

Option Explicit

Dim objIE   As InternetExplorer
Const READYSTATE_COMPLETE = 4
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Sub LoginTest()
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    
    objIE.Navigate2 "https://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.done=http://auctions.yahoo.co.jp/jp"
    While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True
        Sleep 200
    Wend
    
    Dim objDoc As HTMLDocument
    Set objDoc = objIE.Document 'ドキュメントのオブジェクトに一旦入れてみたり、
    
    objDoc.getElementById("username").Value = "xxxxxx"
    
    Dim pwd As HTMLInputElement
    Set pwd = objDoc.getElementById("passwd")   'INPUT要素のオブジェクトに入れてみたり、
    pwd.Value = "zzzzzzz"
    
    objDoc.login_form.submit

    Set pwd = Nothing
    Set objDoc = Nothing

End Sub
id:aiomock

ご回答ありがとうございます。

2009/12/11 10:05:37

その他の回答1件)

id:HALSPECIAL No.1

回答回数407ベストアンサー獲得回数86

ポイント35pt

ボタンを押さなくても、フォームをサブミットさせればできそうです。

objIE.document.login_form.Submit


Option Explicit

Const READYSTATE_COMPLETE = 4
Dim objIE
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub LoginTest()
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    objIE.Navigate2 "https://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.done=http://auctions.yahoo.co.jp/jp"
    While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
        Sleep 200
    Wend

    objIE.document.getElementById("username").Value = "xxxxxxxxxxx"
    objIE.document.getElementById("passwd").Value = "zzzzzzzzzzzz"

    objIE.document.login_form.Submit
End Sub
id:aiomock

ご回答ありがとうございます。

2009/12/11 10:05:34
id:HALSPECIAL No.2

回答回数407ベストアンサー獲得回数86ここでベストアンサー

ポイント100pt

再回答ですみません。

最初の回答はめんどくさいのと好みで型指定なしとしましたが、

できれば参照設定から、

「Microsoft Internet Controls」と

「Microsoft HTML Object Library」

をチェックして、

型指定で開発しることをお勧めします。

理由は、objIE.

とかしたときに、インテリセンス(入力候補)が機能し、スペルミスを防止できたり、

そのオブジェクトがどのようなメソッド、プロパティを持っているか知ることが

できるからです。

Option Explicit

Dim objIE   As InternetExplorer
Const READYSTATE_COMPLETE = 4
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Sub LoginTest()
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    
    objIE.Navigate2 "https://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.done=http://auctions.yahoo.co.jp/jp"
    While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True
        Sleep 200
    Wend
    
    Dim objDoc As HTMLDocument
    Set objDoc = objIE.Document 'ドキュメントのオブジェクトに一旦入れてみたり、
    
    objDoc.getElementById("username").Value = "xxxxxx"
    
    Dim pwd As HTMLInputElement
    Set pwd = objDoc.getElementById("passwd")   'INPUT要素のオブジェクトに入れてみたり、
    pwd.Value = "zzzzzzz"
    
    objDoc.login_form.submit

    Set pwd = Nothing
    Set objDoc = Nothing

End Sub
id:aiomock

ご回答ありがとうございます。

2009/12/11 10:05:37
  • id:aiomock
    以下私のコードになります。

    Sub ie_test() 'IEの表示をテストする。

    'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True '可視、Trueで見えるようにします。

    '表示位置(左上の座標)とサイズ(高さ・幅)を調整する
    objIE.FullScreen = False '※Trueのモードだとびっくりするよ
    objIE.Top = 100 '左上 上位置
    objIE.Left = 100 '左上 左位置
    objIE.Width = 800 '横幅
    objIE.Height = 600 '高さ

    'XXXバー、外観・外枠の調整。
    objIE.Toolbar = True 'タブの切り替えで必要なので、ツールバーを表示にする
    objIE.MenuBar = False 'メニューは非表示にする
    objIE.AddressBar = True 'URLなど アドレスバーは確認のため、表示する
    objIE.StatusBar = True '一番下のステータスバーを表示。

    '処理したいページを表示します。
    objIE.Navigate "https://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.done=http://auctions.yahoo.co.jp/jp" '.Navigate メソッドで Yahooを表示する。
    'Navigate と Navigate2 の 違いが私もイマイチわかってませんが

    'ページの表示完了を待ちます。
    While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True '.ReadyState <> 4の間まわる。
    DoEvents '重いので嫌いな人居るけど。
    Wend

    'ページが表示されたので、表示された文章に対して、処理を行います。

    objIE.document.all.login.Value = "ID"
    objIE.document.all.passwd.Value = "PW"

    objIE.document.all.login_form.Click

    End Sub
  • id:aiomock
    IDとPWに関しては

    <tr class="yjid">
    <td><label for="username" class="yjM">Yahoo! JAPAN ID:</label><br />
    <input name="login" id="username" value="" class="yreg_ipt yjM" type="text"></td>
    </tr>

    <tr class="yjpw yjM">
    <td><label for="passwd" class="yjM">パスワード:</label><br />
    <input name="passwd" id="passwd" value="" class="yreg_ipt yjM" type="password"></td>
    </tr>


    のnameを参考にしました。
  • id:aiomock
    クリック設定に関しては

    <legend>ログインフォーム</legend>
    <form method="post" action="https://login.yahoo.co.jp/config/login?" autocomplete="off" name="login_form">

    を参考にしたのですが、うまく出来ません。。

    クリック設定のみ間違えているとは思うのですが、具体的な name がないため、困っております。。

    フォームをクリックするのに通常とは違うフォーム設定がヤフー側でされているような気がします。。

    わからないです。。

    お手数をおかけしますが、わかるかたおりましたらよろしくお願いいたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません