EXCEL VBA

[ 엑셀 VBA ] VBA로 ChromeDriver(크롬드라이버) 압축파일 다운받기, VBA로 파일 다운로드 하기

카루루1007 2024. 10. 29. 09:43
728x90
반응형

 다운로드 가능한 주소 확인하기

 

크롬 드라이버는 아래 주소에서 목록을 확인할 수 있습니다.

https://googlechromelabs.github.io/chrome-for-testing/#stable

 

Chrome for Testing availability

chrome-headless-shellmac-arm64https://storage.googleapis.com/chrome-for-testing-public/130.0.6723.69/mac-arm64/chrome-headless-shell-mac-arm64.zip200

googlechromelabs.github.io

 

목록을 보면 자신의 상황에 맞는 드라이버를 다운로드할 수 있습니다.

저는 윈도우11 환경에서 사용할 수 있는 드라이버를 다운로드할 계획입니다.

 

이 주소를 브라우저에 입력하면 바로 다운로드가 진행됩니다.

 

물론 지난 블로그에서 작성했던 것과 같이

특정 버전을 알면 해당 버전도 주소를 변경해 다운로드 할 수 있습니다.

아래 빨간색 부분을 바꾸면 원하는 버전을 다운로드 할 수 있습니다.

https://storage.googleapis.com/chrome-for-testing-public/130.0.6723.69/win64/chromedriver-win64.zip

 

반응형

 VBA로 해당 파일 다운로드 하기

 

코드를 작성하기 전에 먼저 라이브러리를 참조해야합니다.

VBA를 실행하고

참조에서 아래 두 가지 라이브러리를 추가하시면 됩니다.

Microsoft XML, v6.0 (이건 선택입니다.)
Microsoft ActiveX Data Objects x.x Library

 

먼저 해당 URL로 요청을 보내는 코드입니다.

아래 Url에서 130.0.6723.69 부분만 수정하면

윈도우11 64비트 환경에서 작동하는 원하는 버전의 ChromeDriver를 다운로드할 수 있습니다.

    Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")    
    Url = "https://storage.googleapis.com/chrome-for-testing-public/130.0.6723.69/win64/chromedriver-win64.zip"
    
    http.Open "GET", Url, False
    http.send

 

그다음 요청이 제대로 이루어졌는지 확인합니다.

http.status가 200이면 제대로 연결이 되었다는 것입니다.

    If http.Status = 200 Then
    
    < 실행 코드>
    
    Else
        MsgBox "다운로드 실패: HTTP 상태 코드 " & http.Status
    End If

 

다음은 파일이 제대로 다운로드되었는지 확인하는 코드입니다.

처음 접속했을 때 파일의 용량을 확인하고

다운로드가 마무리되었을 때 파일의 용량을 확인해서

다운로드가 제대로 되었는지 확인하기 위함입니다.

없어도 동작은 가능합니다.

        If http.getResponseHeader("Content-Length") <> "" Then
            fileSize = CLng(http.getResponseHeader("Content-Length"))
        Else
            MsgBox "파일 크기를 확인할 수 없습니다."
            Exit Sub
        End If
        
        < 파일 다운로드 실행 코드>
        
        actualFileSize = FileLen(zipTempPath)
        
        If actualFileSize = fileSize Then
            MsgBox "파일이 성공적으로 다운로드 되었습니다."
        Else
            MsgBox "파일 다운로드가 완료되지 않았습니다. 크기가 일치하지 않습니다."
        End If

 

다음은 바탕화면에 임의의 폴더를 만드는 코드입니다.

해당 이름의 폴더가 있는지 확인하고 없다면 폴더를 하나 만들어줍니다.

        TempPath = Environ("USERPROFILE") & "\Desktop\TempSelenium\"
        
        If Dir(TempPath, vbDirectory) = "" Then
            MkDir TempPath
        End If

 

다음은 파일을 다운로드하는 코드입니다.

해당 폴더에 동일 이름의 파일이 있다면 덮어쓰기 합니다.

        Set fileStream = CreateObject("ADODB.Stream")
        With fileStream
            .Open
            .Type = adTypeBinary
            .Write http.responseBody
            .Position = 0
            .SaveToFile zipTempPath, adSaveCreateOverWrite
            .Close
        End With

 

728x90

 전체 코드

 

전체 코드입니다.

Sub Test()
    Dim http As Object
    Dim TempPath As String
    Dim zipTempPath As String
    Dim fileSize As Long
    Dim actualFileSize As Long
    
    Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    
    Url = "https://storage.googleapis.com/chrome-for-testing-public/130.0.6723.69/win64/chromedriver-win64.zip"
    
    http.Open "GET", Url, False
    http.send
    
    If http.Status = 200 Then
        If http.getResponseHeader("Content-Length") <> "" Then
            fileSize = CLng(http.getResponseHeader("Content-Length"))
        Else
            MsgBox "파일 크기를 확인할 수 없습니다."
            Exit Sub
        End If
        
        TempPath = Environ("USERPROFILE") & "\Desktop\TempSelenium\"
        
        If Dir(TempPath, vbDirectory) = "" Then
            MkDir TempPath
        End If
        
        zipTempPath = TempPath & "chromedriver-win64.zip"
        
        Set fileStream = CreateObject("ADODB.Stream")
        With fileStream
            .Open
            .Type = adTypeBinary
            .Write http.responseBody
            .Position = 0
            .SaveToFile zipTempPath, adSaveCreateOverWrite
            .Close
        End With
        
        actualFileSize = FileLen(zipTempPath)
        
        If actualFileSize = fileSize Then
            MsgBox "파일이 성공적으로 다운로드 되었습니다."
        Else
            MsgBox "파일 다운로드가 완료되지 않았습니다. 크기가 일치하지 않습니다."
        End If
    Else
        MsgBox "다운로드 실패: HTTP 상태 코드 " & http.Status
    End If
End Sub

※ VBA 셀레니움(Selenium) 사용을 위한 크롬 드라이버 자동 설치 VBA 크롬 드라이버(Chromedriver) 자동설치

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형