VBA로 웹 페이지 크롤링을 하기 위해
Selenium을 선택하여 사용할 경우
SeleniumBasic이 설치되어야 합니다.
※ SeleniumBasic 설치 방법, VBA 크롤링 준비
직접 확인하는 방법도 있지만,
공부하는 목적으로 VBA 코드를 작성해
지금 설치되어 있는 chromedriver의 버전을 확인하는 방법을
작성해 보겠습니다.
직접 버전 확인해 보기
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
여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.
'EXCEL VBA' 카테고리의 다른 글
[ 엑셀 VBA ] 내 크롬 브라우저의 버전에 맞는 최신 ChromeDriver 버전 VBA로 확인하기 (2) | 2024.10.28 |
---|---|
[ 엑셀 VBA ] 크롬 브라우저 버전 정보 확인하기 (0) | 2024.10.28 |
[ 엑셀 VBA ] 셀 병합 해제하고 자동 채우기 (0) | 2024.09.26 |
[ 엑셀 VBA ] VBA 코드 보호하기 : VBA 코드 암호 걸기 (0) | 2024.09.26 |
[ 엑셀 VBA ] 특정 셀에 데이터를 입력하면, 입력 날짜 및 시간 생성, 데이터 변경 날짜 자동입력 (0) | 2024.09.12 |