본문 바로가기
Developer/Python

[Python] 웹스크랩핑하기 - Selenium을 통한 크롬 브라우저 제어

by Doony 2019. 5. 26.

이번에는 단순히 정보를 받아오는데 그치치 않고, 능동적으로 브라우저를 제어하는 방법에 대해 알아보겠습니다. (모든 포스팅은 jupyter notebook 기준으로 설명합니다.)

  1. 먼저 웹브라우저 제어 도구인 selenium을 설치합니다.
    !pip install selenium
  1. 크롬 브라우저 드라이버를 설치합니다.
    여기에서 크롬용 드라이버를 다운받습니다. 다운로드 페이지 하단에 크롬브라우저를 택하시고, 컴퓨터에 깔린 크롬 버전에 받게 설치하시면 됩니다. (크롬 버전 확인: 구글에 my user agent를 검색하세요.)
  1. 아래 코드를 실행하여 크롬브라우저를 열어봅니다.
<table class="colorscripter-code-table" style="margin: 0; padding: 0; border: none; background-color: #fafafa; border-radius: 4px;" cellspacing="0" cellpadding="0"><tbody><tr><td style="padding: 6px; border-right: 2px solid #e5e5e5;"><div style="margin: 0; padding: 0; word-break: normal; text-align: right; color: #666; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;"><div style="line-height: 130%;">1</div><div style="line-height: 130%;">2</div></div></td><td style="padding: 6px 0;"><div style="margin: 0; padding: 0; color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;"><div style="padding: 0 6px; white-space: pre; line-height: 130%;"><span>from</span>&nbsp;selenium&nbsp;<span>import</span>&nbsp;webdriver</div><div style="padding: 0 6px; white-space: pre; line-height: 130%;">browser&nbsp;<span></span><span>=</span>&nbsp;webdriver.Chrome(<span>'/PATH/chromedriver'</span>)</div></div></td><td style="vertical-align: bottom; padding: 0 2px 4px 0;"><a style="text-decoration: none; color: white;" href="http://colorscripter.com/info#e" target="_blank" rel="noopener"><span style="font-size: 9px; word-break: normal; background-color: #e5e5e5; color: white; border-radius: 10px; padding: 1px;">cs</span></a></td></tr></tbody></table>

제어가 가능한 크롬브라우저가 열리는 것을 확인할 수 있습니다. 윈도우는 별도의 경로 설정이 불필요하나, 맥은 위와 같이 2번에서 다운받은 파일의 경로설정이 필요합니다.

  1. 지정한 주소로 이동시킵니다.
<table class="colorscripter-code-table" style="margin: 0; padding: 0; border: none; background-color: #fafafa; border-radius: 4px;" cellspacing="0" cellpadding="0"><tbody><tr><td style="padding: 6px; border-right: 2px solid #e5e5e5;"><div style="margin: 0; padding: 0; word-break: normal; text-align: right; color: #666; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;"><div style="line-height: 130%;">1</div><div style="line-height: 130%;">2</div></div></td><td style="padding: 6px 0;"><div style="margin: 0; padding: 0; color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;"><div style="padding: 0 6px; white-space: pre; line-height: 130%;">url&nbsp;<span></span><span>=</span>&nbsp;<span>'https://hyongdoc.tistory.com'</span></div><div style="padding: 0 6px; white-space: pre; line-height: 130%;">browser.get(url)</div></div></td><td style="vertical-align: bottom; padding: 0 2px 4px 0;"><a style="text-decoration: none; color: white;" href="http://colorscripter.com/info#e" target="_blank" rel="noopener"><span style="font-size: 9px; word-break: normal; background-color: #e5e5e5; color: white; border-radius: 10px; padding: 1px;">cs</span></a></td></tr></tbody></table>

설정된 URL로 창이 이동하는 것을 볼 수 있습니다. 여기에서 블로그 타이틀을 클릭해보겠습니다.

  1. 블로그 타이틀에 해당하는 cssSelector찾기

    div.box_header 안에 a.link_logo 인 것을 찾았습니다.
  1. css 설렉터에 해당하는 객체 클릭하기
<table class="colorscripter-code-table" style="margin: 0; padding: 0; border: none; background-color: #fafafa; border-radius: 4px;" cellspacing="0" cellpadding="0"><tbody><tr><td style="padding: 6px; border-right: 2px solid #e5e5e5;"><div style="margin: 0; padding: 0; word-break: normal; text-align: right; color: #666; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;"><div style="line-height: 130%;">1</div><div style="line-height: 130%;">2</div></div></td><td style="padding: 6px 0;"><div style="margin: 0; padding: 0; color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;"><div style="padding: 0 6px; white-space: pre; line-height: 130%;">blog_title&nbsp;<span></span><span>=</span>&nbsp;browser.find_elements_by_css_selector(<span>'div.box_header&nbsp;a.link_logo'</span>)</div><div style="padding: 0 6px; white-space: pre; line-height: 130%;">blog_title[<span>0</span>].click()</div></div><div style="text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;"><a style="color: #e5e5e5; text-decoration: none;" href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div></td><td style="vertical-align: bottom; padding: 0 2px 4px 0;"><a style="text-decoration: none; color: white;" href="http://colorscripter.com/info#e" target="_blank" rel="noopener"><span style="font-size: 9px; word-break: normal; background-color: #e5e5e5; color: white; border-radius: 10px; padding: 1px;">cs</span></a></td></tr></tbody></table>

이와 같이 click() 메소드로 클릭명령을 내릴 수 있습니다.

댓글