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側に表示することができましたとさ。
プログラミング
VBA
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
コメント