본문 바로가기
퀀트자동주식투자

엑셀 VBA + 셀레니움(Selenium)으로 증권정보 크롤링하기(1)

by 사막장 2023. 4. 25.

오늘은 엑셀 VBA와 셀레니움을 활용해 증권정보를 얻고, 시트에 저장하는 코드를 짜보려고 한다.

 

우선 이전 단계를 통해 셀레니움을 설치하여 구동할 준비를 완료하였다.

 

그리고 증권정보를 얻을 페이지로 들어가보자.

나는 네이버 증권에서 정보를 얻어와보려고 한다.

나는 외국인비율, 상장주식수를 빼고 영업이익을 추가하여 조회하고 싶다.

매번 수동으로 체크할 수 없기 때문에 셀레니움에게 해당 칸을 한번씩 클릭하라는 명령을 내려야한다.

 

클릭하려는 칸을 셀레니움이 이해 할 수 있는 단어로 바꾸기 위해 F12 키를 눌러준다.

F12키를 누르고 노란색 칠해진 아이콘을 클릭한다.

저 아이콘을 클릭하고 원래 창으로 돌아가서

클릭하고자 하는 체크박스 위에 커서를 가져간다.

 

외국인비율 체크박스는 id 가 "option15" 이다.

그러면 어제 썻던 코드에서 다시 시작하여,

sub VBA_Selenium_TEST ()
	dim sel as new ChromeDriver
    url = "https://finance.naver.com/sise/sise_market_sum.naver"
    sel.get url
    sel.findelementbyid("option15").click 'id가 'option15' 인 것을 찾아 '클릭' 명령
    sel.wait 5000 '5초간 기다림, 1000 = 1초
end sub

이렇게 작성해볼 수 있겠다.

코드를 한줄 씩 해설하자면,

dim sel as new chromedriver 로 sel 이란 이름의 크롬을 하나 열게 되는것이라고 생각하먄 편하다.

url 변수에 방문할 주소를 복붙하고,

sel.get 명령어에 인수(url)를 전달하여 인수의 경로를 sel 이란 이름의 크롬에서 연다.

sel.findelementbyid 함수는 sel 로 열린 크롬에서 html 문서에 있는 id를 기준으로 페이지 소스를 검색하는 방법이다. 이 메소드는 해당 id 를 쌍따옴표로 작성해야한다.

같은 비슷한 시리즈로 findelementbyclass findelementbyXpath 등이 있다.

마지막으로 이렇게 찾은 개체에 click이라는 메소드를 호출하여 해당 대상을 클릭하게 한다.

이미 클릭되어있는 대상에 다시 click 메소드를 보내면 한번 더 클릭하여 선택이 해제된다.

 

댓글