본문 바로가기

Python/Crawling

Web Driver & Selenium

728x90

Web Driver

Web Driver는 FireFox, Chrome 등과 같은 브라우저에서 제공하는 API들로, 이를 이용하면 코드를 통해 실제 사용자가 브라우저를 다루는 것처럼 사용할 수 있다. 또한 Python에는 이러한 Web Driver를 사용하기 위한 Selenium이라는 라이브러리가 조재한다. 이러한 Web Driver를 이용하면, 단순 패킷 요청만 하는 것이 아닌 브라우저 자체를 이용하는 것이기 때문에 JS와 CSS에 관한 것들도 자동으로 테스트를 할 수 있고, Google과 같이 크롤링 하기 힘든 곳도 크롤링 할 수 있다.

Web Driver로 사용 가능한 브라우저로는,

  • FireFox
  • Chrome
  • IE
  • Opera
  • PhantomJs

등의 브라우저가 존재하고, 이 중 PhantomJS를 이용할 경우, 실제 브라우저를 이용하는 것이 아니라 가상의 브라우저를 이용해 실제 사용자가 브라우징 하는 것처럼 행동할 수 있다.


Selenium이란?

Selenium은 주로 웹앱을 테스트하는데 이용하는 프레임워크이다. webdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어하게 된다.

브라우저를 직접 동작시킨다는 것은 JavaScript를 이용해 비동기적으로 혹은 뒤늦게 불러와지는 컨텐츠들을 가져올 수 있다는 것이다. 즉, '눈에 보이는' 컨텐츠라면 모두 가져올 수 있다는 뜻이다. requests에서 사용했던 .text의 경우 브라우저에서 '소스보기'를 한 것과 같이 동작하여, JS등을 통해 동적으로 DOM이 변화한 이후의 HTML을 보여주지 않는다. 반면 Selenium은 실제 웹 브라우저가 동작하기 때문에 JS로 렌더링이 완료된 후의 DOM결과물에 접근이 가능하다.


설치하는 방법

1. pip를 이용하여 Selenium을 설치한다.

pip install selenium

2. webdriver 설치

Selenium은 sebdriver라는 것을 통해 디바이스에 설치된 브라우저들을 제어할 수 있다. 크롬을 사용하려면 로컬에 크롬과 크롬 드라이버가 설치외어 있어야 한다.

https://sites.google.com/a/chromium.org/chromedriver/downloads

3. PhantomJS webdriver 설치

http://phantomjs.org/download.html


알아두면 좋을 메서드

항목 설명
find_element_by_class_name 클래스 이름이 name에 해당하는 요소를 하나 추출
find_elements_by_css_selector CSS 선택자로 요소를 여러개 추출
find_element_by_tag_name 태그 이름이 name에 해당하는 요소를 하나 추출
get_attribute 요소의 속성 중 name에 해당하는 속성의 값을 추출
send_keys(value) value에 해당하는 키를 입력
text 요소 내부의 글자

https://github.com/SeongJaeMoon/PracPython/blob/master/selenium_dom_selector.md


Tip

리다이렉트 되는  속도에 비해, 코드 실행속도가 너무 빠르다면 사이에 sleep(1) 을 주면 해결된다.

 

[출처]

https://medium.com/@peteryun/python-selenium%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%81%AC%EB%A1%A4%EB%9F%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0-b055cefd1195

https://yumere.tistory.com/75

https://seongjaemoon.github.io/python/2018/05/16/python-course6.html

https://beomi.github.io/2017/02/27/HowToMakeWebCrawler-With-Selenium/

728x90

'Python > Crawling' 카테고리의 다른 글

Selenium - xpath  (0) 2023.05.04
Selenium - 아래 또는 위로 스크롤하는 방법  (0) 2023.05.04
Selenium - Waits  (0) 2023.05.04
웹 크롤러(Beautilful Soup, Scrapy)  (0) 2023.05.04
TextRank를 이용한 문서 요약  (0) 2023.05.03