VBAのIEで画面をスクロールする方法について
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
Message#2 2014年9月2日(火)16時20分 From: 管理人 | 返事 削除 変更 |
みるめーくのメッセージ(#1)への返事 > VBAでブラウザを開くまではできたのですが、ページの最後までスクロールするにはどうしたらいいでしょうか? まず、ページの高さを取得します。 その後にjavaScriptのscrollToメソッドを利用して、スクロール位置を指定座標へ移動します。 そして、VBAのIEオブジェクトのDocument.Script.setTimeout で実行するとスクロールすることができます。 scrollTo(X座標, Y座標),処理待ち時間 X座標は0でY座標にページの高さを設定すれば、最下部まで移動してくれます。 pageHeight(ページの高さ)=objIE.document.body.scrollheight 1000は実行までの処理待ち時間になります。1000は1秒ですので、1秒後にスクロール処理をしています。 sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.visible = True objIE.navigate "http://www.vba-ie.net/" Do DoEvents() Loop While objIE.busy or objIE.readyState <> 4 pageHeight = objIE.document.body.scrollheight objIE.Document.Script.setTimeout "javascript:scrollTo(0," & pageHeight & ");",1000 End Sub ツイッターページなどスクロールが延々と続くようなサイトでスクロールしたい場合はループ処理で対応できます。 こちらでは、10回ループ処理させていますが、ループ処理の待ち時間はjavascriptの待ち時間より長く設定してください。 javascritの待ち時間が長ければ、ループ処理が早く終わってしまうので、正常に処理されません。 必ず間を空けて処理してみてください。 #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.visible = True objIE.navigate "http://www.vba-ie.net/" Do DoEvents() Loop While objIE.busy or objIE.readyState <> 4 pageHeight = objIE.document.body.scrollheight For i = 1 To 10 objIE.Document.Script.setTimeout "javascript:scrollTo(0," & pageHeight & ");",1000 sleep 2000 Next i End Sub |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降