EXCEL VBA

[ 엑셀 VBA ] VBA로 내 컴퓨터에 설치된 ChromeDriver 버전 확인하기

카루루1007 2024. 10. 28. 11:47
728x90
반응형

VBA로 웹 페이지 크롤링을 하기 위해 

Selenium을 선택하여 사용할 경우

SeleniumBasic이 설치되어야 합니다.

※ SeleniumBasic 설치 방법, VBA 크롤링 준비

 

직접 확인하는 방법도 있지만,

공부하는 목적으로 VBA 코드를 작성해 

지금 설치되어 있는 chromedriver의 버전을 확인하는 방법을 

작성해 보겠습니다.

 

728x90

 직접 버전 확인해 보기

 

SeleniumBasic이 설치된 폴더로 이동합니다.

윈도우11을 사용하고 있는 제 컴퓨터에서 

SeleniumBasic 설치 폴더는

C드라이브 → 사용자 폴더 → [ 사용자 이름 폴더 ] → AppData → Local → SeleniumBasic

여기에 설치가 되어 있습니다.

 

AppData폴더숨김폴더 표시를 하면 확인할 수 있습니다.

 

해당 경로에서 직접 cmd 명령을 실행한 다음 

chromedriver --version

명령을 실행하면 다음과 같이 정보를 확인할 수 있습니다.

ChromeDriver 2.21.371459

 

현재 저의 Chrome 브라우저의 버전은 

130.0.6723.70

SeleniumBasic를 설치할 때 기본적으로 포함되어 있는 driver가 상당히 오래된 것 같아

버전 오래 된 것 같습니다.

 

최신 드라이버를 다운로드하고 저 번호가 버전에 맞는지 다시 확인해 보았습니다.

최신 드라이버는 아래 링크에서 다운로드 가능합니다.

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

 

최신 드라이버를 복사하고 다시 버전을 확인해보니

아래와 같이 출력이 됩니다.

ChromeDriver 130.0.6723.69

 

현재 크롬 브라우저 버전과 크롬 드라이버 버전이 완전히 일치하지는 않습니다.

맨 앞의 버전만 즉, 예시를 든 버전에서는 130.x.x.x만 일치하면

웹 크롤링하는 데는 문제없는 것으로 알고 있습니다.

 

반응형

 VBA로 SeleniumBasic 폴더의 ChromeDriver 버전 확인하기

 

먼저 VBA를 실행하고

도구참조에서

Windows Script Host Object Model에 체크하고 확인을 눌러줍니다.

 

SeleniumBasic 폴더에서

chromdriver.exe 파일을 찾아

chromedriver ---version 명령 실행 후

결과를 가지고 와야 합니다.

 

SeleniumBasic 폴더는

C드라이브 → 사용자 폴더 → [ 사용자 이름 폴더 ] → AppData → Local → SeleniumBasic

이것이므로 그냥 전체 경로를 복사해서 붙여와도 되지만,

동일한 환경에서는 동일한 경로에 설치될 것이기 때문에

사용자가 바뀌어도 사용할 수 있게 환경변수를 사용하겠습니다.

※ 환경변수 : [ windows ] 환경변수(environment variable)에 대한 정리

 

명령 프롬프트 창을 열고 

set 명령을 실행하면

환경변수 이름 LOCALAPPDATA

C드라이브 → 사용자 폴더 → [ 사용자 이름 폴더 ] → AppData → Local

이 경로를 가리키고 있다는 것을 알 수 있습니다.

 

아래와 같이 코드를 작성하고 실행하면

SeleniumBasic 폴더 경로가 제대로 출력이 되는 것을 확인할 수 있습니다.

Sub Test()
    SeleniumPath = Environ("LOCALAPPDATA") & "\SeleniumBasic\"
    
    Debug.Print SeleniumPath
End Sub

결과 : C:\Users\karur\AppData\Local\SeleniumBasic\

 

그다음 파일의 위치를 알아야 하므로 기존 경로에 파일 이름을 붙여줍니다.

Sub Test()
    SeleniumPath = Environ("LOCALAPPDATA") & "\SeleniumBasic\"    
    FilePath = SeleniumPath & "chromedriver.exe"
    
    Debug.Print FilePath
End Sub

결과 : C:\Users\karur\AppData\Local\SeleniumBasic\chromedriver.exe

 

그 다음 실행할 명령이 chromedriver --version이기 때문에

--version이 붙어 있는 문자열도 별도 변수에 넣어줍니다.

명령 프롬프트 창에 chromedriver.exe --version으로 실행해도 결과는 동일하므로,

파일 경로 뒤에 바로 --version을 추가했습니다.

Sub Test()
    SeleniumPath = Environ("LOCALAPPDATA") & "\SeleniumBasic\"
    FilePath = SeleniumPath & "chromedriver.exe"
    execute_command = FilePath & " --version"
    
    Debug.Print execute_command
End Sub

결과 : C:\Users\karur\AppData\Local\SeleniumBasic\chromedriver.exe --version

 

위 코드의 결과를 커맨드창에서 실행하면 경로에 상관없이

크롬드라이버의 버전을 확인할 수 있습니다.

 

그 다음 명령 프롬프트 창에서 명령을 실행하기 위해

다음과 같이 객체를 하나 생성합니다.

Set WCShell = CreateObject("Wscript.Shell")

 

그 다음 명령을 실행하고, 그 결과를 변수에 담습니다.

raw_version = WSShell.Exec(execute_command).StdOut.ReadAll

 

지금까지의 코드입니다.

Sub Test()
    
    Set WSShell = CreateObject("Wscript.Shell")

    SeleniumPath = Environ("LOCALAPPDATA") & "\SeleniumBasic\"
    FilePath = SeleniumPath & "chromedriver.exe"
    execute_command = FilePath & " --version"
    
    raw_version = WSShell.Exec(execute_command).StdOut.ReadAll
    
    Debug.Print raw_version
End Sub

결과 : ChromeDriver 130.0.6723.69 (3ec172b971b이 뒤로 알수없는 글자들)

 

여기서 버전 정보만 추출하려면

출력된 결과를 공백을 기준으로 나누어 두 번째 것을 가지고 오면 됩니다.

Sub Test()
    
    Set WSShell = CreateObject("Wscript.Shell")

    SeleniumPath = Environ("LOCALAPPDATA") & "\SeleniumBasic\"
    FilePath = SeleniumPath & "chromedriver.exe"
    execute_command = FilePath & " --version"
    
    raw_version = WSShell.Exec(execute_command).StdOut.ReadAll
    
    version_num = Split(raw_version, " ")
    
    Debug.Print version_num(1)
    
End Sub

결과 : 130.0.6723.69

 

추가로 맨 앞의 130만 추출하려면

동일하게  "."로 나누어 맨 앞의 것만 추출하면

130만 가지고 올 수 있습니다.

Sub Test()
    
    Set WSShell = CreateObject("Wscript.Shell")

    SeleniumPath = Environ("LOCALAPPDATA") & "\SeleniumBasic\"
    FilePath = SeleniumPath & "chromedriver.exe"
    execute_command = FilePath & " --version"
    
    raw_version = WSShell.Exec(execute_command).StdOut.ReadAll
    
    version_num = Split(raw_version, " ")
    version_temp = version_num(1)
    main_version = Split(version_temp, ".")
        
    Debug.Print main_version(0)
    
End Sub

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

엑셀 공부하기
VBA 공부하기

728x90
반응형