Excel VBAとIEでウェブページの情報を取得する(スクレイピング)

MS社から出ているウェブブラウザはEdgeが推奨されており、IEはもうオワコンになろうとしています。IEに対応していないサイトすらもあります。

ただ、Excel VBAを使ってスクレイピングするにはIEを使わざるを得ないのが現状なので、使い方を覚えておきましょう。IEが完全にサポート終了したら次はこれがEdgeに置き換わるだけでしょうし。

参考にしたのは[VBA]30分あればできるVBAスクレイピングです。

参考サイトはヨドバシの会員ページを例にとっていたので、ちょうどいいやと思い僕もヨドバシを例につくってみます。

会員情報が入ってしまっていたのでメールアドレスが入った状態になっていましたが、ここに任意のメールアドレスを入力するところもやります。メールアドレスはauthenticateDO.authKeyと命名されたフォームでした。

パスワード(こっちはauthenticateDO.passwordというフォーム)も入れて、メンバーズページへログインします。このログインボタンはクリックするとJavaScriptによるプログラムlogin(this)が走ります。

ログイン後の画面です。スクショの右下あたりに「ようこそ!○○○○様」と会員の名前が表示されますので、ここを拾いにいきます。ここはmemberNameというクラス名でした。

注意すべきは、ログインボタンを押してマイページに遷移するのに結構時間を要すること。ページの読み込みが終わってから取得しないといけません。VBAでIEを操作してJavaScriptで動作するWebページをスクレイピングを参考にし、読み込み時間を数秒確保しました。

結果としてExcel側に表示することができましたとさ。

Sub scrapingIE()

    Dim objIE As InternetExplorer   'IEオブジェクトを準備
    Set objIE = CreateObject("Internetexplorer.Application")
    
    objIE.Visible = True    'IEを表示
    
    objIE.navigate "https://secure.goldpoint.co.jp/gpm/authentication/index.html"   'URLを指定
    
    Call WaitResponse(objIE)    '読み込み待機
    
    Dim setId As String
    Dim setPassword As String
    
    setId = "ログインID"
    setPassword = "ログイン用パスワード"
    
    'IDとパスワードをセットしてログイン
    objIE.document.forms("form").Item("authenticateDO.authKey").Value = setId
    objIE.document.forms("form").Item("authenticateDO.password").Value = setPassword
    objIE.navigate "JavaScript:login(this)"

    Application.Wait Now + TimeValue("0:00:05")     'HTMLの読み込み待ち
    
    Dim htmlDoc As HTMLDocument     'HTMLドキュメントオブジェクトを準備
    Set htmlDoc = objIE.document
    
    MsgBox htmlDoc.getElementsByClassName("memberName")(0).innerHTML
    
End Sub

Sub WaitResponse(objIE As Object)
    Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
        DoEvents
    Loop
End Sub

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です