반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

[웹 크롤링 기초]

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

 

[정적 웹크롤링]

2021.03.30 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 - [파이썬 패키지/웹 크롤링] - [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 - [파이썬 패키지/웹 크롤링] - [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

 

[동적 웹크롤링]

2021.04.03 - [분류 전체보기] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 - [파이썬 패키지/웹 크롤링] - [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

 


오늘은 Selenium으로 원하는 화면 상태에 도달할 수 있도록 웹 브라우저를 조작 하는 법을 공부해보겠습니다.

 

예를 들어서, 네이버 메일을 확인하기 위해서 로그인 과정을 거쳐야 한다거나, 유튜브 댓글을 모두 크롤링하는데 스크롤을 내려야지 댓글이 추가적으로 업데이트 되는 상황이 있겠죠.

 

이런 상황에서 원하는 버튼을 클릭 하거나 문자를 입력하는 등의 컴퓨터가 해주어야 하는데 이를 Selenium 패키지가 대신 해줄 수 있습니다.

 

쉽게 말해서 웹 브라우저용 매크로랄까요?

 

Selenium으로 화면을 조작하는 전체적인 개념은 다음과 같습니다.


1) 조작을 원하는 버튼이나 입력창의 html을 파악

 

2) 아래의 두 함수에 html 정보를 입력해서 객체(버튼/입력창 등) 선택

  • find_element_by_css_selector( )
  • find_element_by_xpath( )

3) 기능 동작 관련 함수로 원하는 기능 조작

  • 클릭 : .click( )
  • 키 입력: .send_keys( )

원하는 키워드를 검색하는 아주 간단한 예제를 통해서 어떤 방식으로 사용하는지 보여드리겠습니다.

 

1단계. 원하는 버튼의 html 타겟팅

 

가장 먼저 해줄 일은 크롬을 실행해서 F12를 누르는 것 부터 시작합니다.

 

F12를 누르면 지난 강의에서 배우셨 듯이 웹 브라우저 우측에 '개발자 도구'가 나타날 거예요. 그러면 개발자 도구 상단의 화살표 버튼을 눌러서 조작을 원하는 부분을 클릭해주세요.

 

 

검색창에 원하는 키워드를 입력하고 앤터를 눌러주는 것이 이번 예제의 목적이므로 검색창을 타겟팅 할 수 있도록 'CSS Selector' 개념을 이용해보겠습니다. CSS Selector 개념을 모르신다면 아래의 글을 참고해주세요.

 

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

 

 

방금 전까지 잘 따라오셨다면 아마 개발자 도구에 '검색창'의 html 부분이 나타나 있을텐데요. 우선 빨간색으로 표시된 class 속성값 부분을 더블클릭해서 복사(Ctrl+c)를 해주세요.

<여기서 잠깐>

class명이 gLFyf gsfi인 input 태그를 선택하려면, input.gLFyf.gsfi라고 입력해주어야 합니다.

1) input 바로 뒤의 점(.)은 class를 나타냄 (id라면 . 대신 #이 들어감) 2) gLFyf 바로 뒤의 점(.)은 띄어쓰기를 의미하며, 띄어쓰기를 모르는 컴퓨터를 위한 것임

 

여기까지 따라오셨다면 이제 코딩창으로 넘어가서 원하는 조작을 수행해 보겠습니다.

 

 

2단계. Selenium으로 타겟팅한 html 찾기

 

그 다음으로 해줄 일은 Selenium의 find_elements_by_css_selector( ) 함수로 위에서 가져온 선택자(input.gLFyf.gsfi)를 ( ) 안에 넣어서 크롬 드라이버가 알아먹을 수 있게 변환해주는 것입니다.

 

그 전에 먼저 관련 모듈을 import 해주고, 구글 드라이버를 이용해 'Google'까지 접속해줍시다. 아래 코드에 주석을 달아두었으니 그리 어렵진 않으실거예요.

 

# selenium의 webdriver를 사용하기 위한 import
from selenium import webdriver

# selenium으로 무엇인가 입력하기 위한 import
from selenium.webdriver.common.keys import Keys

# 페이지 로딩을 기다리는데에 사용할 time 모듈 import
import time

# 크롬드라이버 실행  (경로 예: '/Users/Roy/Downloads/chromedriver')
driver = webdriver.Chrome('chromedriver의 경로를 입력할 것') 

#크롬 드라이버에 url 주소 넣고 실행
driver.get('https://www.google.co.kr/')

# 페이지가 완전히 로딩되도록 3초동안 기다림
time.sleep(3)

 

<여기서 잠깐>

혹시 아직 chromedriver를 설치 안하셨다면 아래의 글을 보시고 설치해주셔야 코드가 정상작동 합니다.

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

 

그리고 chromedriver의 경로를 어떻게 입력해야할지 모르시겠다면 아래의 글을 참고해주세요.

2021.06.05 - [파이썬 기초/기초 문법] - [Python 기초] 파이썬으로 경로와 디렉토리 다루기(feat. 절대 경로와 상대 경로)

 

 

자, 다시 본론으로 돌아와서 find_elements_by_css_selector( ) 함수로 chromedriver가 검색창을 찾을 수 있게 해봅시다.

 

# 검색어 창을 찾아 search 변수에 저장 (css_selector 이용방식)
search_box = driver.find_element_by_css_selector('input.gLFyf.gsfi')

# 검색어 창을 찾아 search 변수에 저장 (xpath 이용방식)
search_box = driver.find_element_by_xpath('//*[@id="google_search"]')

 

갑자기 xpath가 나와서 당황스러우시겠지만 둘 다 같은 결과를 수행하는 코드라는 것을 알아두세요.

 

참고로 xpath는 아까 찾으셨던 html 코드 위에서 '우클릭'을 하신 후, 아래 그림과 같이 'Copy Xpath'를 클릭하시면 클립보드에 //*[@id="google_search"] 라는 xpath가 저장되어 있을거예요. 이걸 위의 코드와 같이 넣어주시면 된답니다.

 

어렵지 않죠? html에 class나 id가 없어 타겟팅 하기 어려운 경우에 자주 사용하니 꼭 알아두시면 좋을 것 같아요!

 

 

 

3단계. 원하는 조작 수행

 

여기까지 하셨으면 Chromedriver가 Selenium 패키지의 find_element 함수를 이용해서 원하는 html을 찾은 상태입니다.

 

이제 남은 일은 원하는 조작을 수행하도록 명령 내리는 일입니다.

명령은 간단합니다. 클릭하거나 원하는 키를 입력해주는 것 2가지 입니다.

 

  • 클릭 : .click( )
  • 키 입력: .send_keys( )

<send_keys로 입력 가능한 키 목록>

명령어 기능
Kyes.ENTER
Keys.RETURN
엔터
Keys.SPACE 스페이스
Keys.ARROW_UP
Keys.ARROW_DOWN
Keys.ARROW_LEFT
Keys.ARROW_RIGHT
방향키(상하좌우)
Keys.BACK_SPACE
Keys.DELETE
지우기 (벡스페이스)
지우기 (딜리트)
Keys.CONTROL
Keys.ALT
Keys.SHIFT
Keys.TAB

자주 사용하는 기능키(Ctrl, Alt, Shift, Tab)
Keys.PAGE_UP
Keys.PAGE_DOWN
스크롤 업
스크롤 다운
Keys.F1~9 F1 부터 F9 (F+숫자)
Keys.EQUALS, Keys.ESCAPE, Keys.HOME, Keys.INSERT 기타 등등

 

그럼 간단히 어떻게 코드로 적용할 수 있는지 알아보겠습니다.

 

search_box.send_keys('파이썬')
search_box.send_keys(Keys.RETURN)
time.sleep(1)

 

사용법 역시 정말 간단합니다.

아까 찾았던 검색창(search_box) 변수 다음에 .send_keys('검색어')를 넣어주면 아래와 같은 상태가 되겠죠?

 

그 다음에 search_box.send_keys(Keys.RETURN)을 입력해주면 우리가 검색어를 치고 '엔터키'를 입력해주는 것과 동일합니다.

 

참고로 그림에서 Google 검색 버튼을 우리가 했던 방식으로 타겟팅 해주고 .click( ) 함수로 '마우스 클릭' 해주어도 엔터키를 입력한 것과 동일한 결과를 얻을 수 있습니다.

 

# click 함수는 ()안에 아무것도 넣지 않으면 좌클릭을 수행
search_button.click()

 

이 부분은 여러분들의 실습 과제로 남겨두겠습니다.

 

오늘 준비한 내용은 여기까지입니다.

 

오늘도 공부하시느라 고생 많으셨습니다~!

 


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형

+ Recent posts