Selenium(Edge/Chrome)

ChromeでファイルをPCにダウンロードする【Selenium】【ExcelVBA】

VBAでSelenium経由Chromeを起動し、画像ファイルなどをダウンロードしたい時があります。
Win32APIのURLDownloadToFileでダウンロードする事が可能です。

Webページの画像をダウンロードするサンプルコード

'■URLDownloadToFile/DeleteUrlCacheEntryを使用宣言
#If VBA7 Then
    Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
    Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
#Else
    Declare Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long

    Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
#End If
'■Chromeでファイルダウンロードするサンプルコード
Dim driver As New WebDriver
Public Sub sample()
    '■ブラウザを起動
    driver.Start "chrome"
    driver.Get "https://vba-create.jp/"
     
    Dim obj As WebElement
    For Each obj In driver.FindElementsByTag("img")
        '■ダウンロード対象のキャッシュをクリア
        Call DeleteUrlCacheEntry(obj.Attribute("src"))
        '■絶対パス付きファイル名(srcが存在するもの)のみダウンロードを行う。
        If obj.Attribute("src") <> "" Then
            Call URLDownloadToFile(0, obj.Attribute("src"), "C:\vba" & "\" + Call_SpecificCharacterAfterDelete(obj.Attribute("src"), "/"), 0, 0)
        End If
    Next obj
End Sub

URLDownloadToFileパラメータ

引数パラメータ設定値
1pCaller0(固定)
2szURLダウンロードするURL
3szFileName保存先パス
4dwReserved0(固定)
5lpfnCB0(固定)

注意点

SeleniumBasicについて

Internet Explorer11 のサポート期限が2022年6月までと、スクレイピング自体入れ替えていく必要があります。
今一番スムーズなのはSeleniumBasicを使用したスクレイピングと考えます。

但し、VBAでのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。

コメント

タイトルとURLをコピーしました