2019년에 Crawling 공부하면서 정리를 했었던 내용의 일부입니다.
Selenium 이해
- 웹 브라우저를 제어하여 웹 어플리케이션 테스트를 자동화하려는 목적으로 사용.
- Selenium은 하나의 원격 브라우저를 연 다음, 사용자가 웹 서핑을 하듯이 원하는 웹 페이지를 열고, 아이디와 비밀번호를 입력하게 할 수도 있으며, 마우스가 이곳 저곳을 돌아다니면서 클릭하는 행동을 흉내낼 수 있음 → 활용법은 무궁무진
Java JDK 설치
- OS에 맞게 JDK 설치이후 JAVA_HOME 경로 따로 설정해주시면 됩니다.
RSelenium 패키지 소개
- Selnium은 웹 브라우저를 제어하여 웹 애플리케이션 테스트를 자동화하려는 목적으로 주로 사용됨
- Remote Driver를 설정하여 웹 브라우저를 띄우고, 리모트 웹 브라우저를 원격으로 제어
- 검색창에 검색어를 입력하고, 마우스로 버튼을 클릭하는 등의 행동을 구현할 수 있음.
크롬 드라이버 버전 확인
- RSelenium 패키지의 함수를 이용해 리모트 웹 브라우저를 띄우기 전에 먼저 binman 패키지의 list_version()함수를 이용해 자신의 컴퓨터에 저장된 크롬드라이버 버전을 확인 해주어야함
- 만약 컴퓨터에 저장된 크롬 드라이버가 없다면 결과가 출력되지 않을 수 있음
> bidman::list_version(appname = 'chromedriver')
크롬 드라이버 설정
- wdman 패키지의 chrome() 함수를 이용해 크롬 드라이버를 설정함
- 'port' 인자에 적당한 숫자를 할당하고, 'version'인자에는 앞에서 확인한 크롬드라이버 버전 중 하나 낮은 것을 선택
> driver <- wdman::chrome(port = 4567L, version = '74.0.3729.6')
- 만약 앞에서 크롬드라이버 버전을 확인했을 때 아무런 값도 출력되지 않았다면 'version' 인자를 생략하고 실행.
> driver <- wdman::chrome(port = 4567L)
Rselenium 패키지 주요함수 1 : remote driver 설정
- remote webdriver를 설정
- 'port' 인자에 할당된 정수는 앞에서 chrome() 함수에 설정된 값과 같아야함
- browserNmae 인자는 생략해도 됨.
> library(tidyverse)
> library(RSelenium)
> library(binman)
> library(wdman)
> library(rvest)
> remote <- remoteDriver(port = 4567L, browserName = 'chrome')
Rselenium 패키지 주요함수 2 : remote web browser 제어
- 리모트 웹 브라우저 열기
> remote$open()
- 리모트 웹 브라우저 닫기
> remote$close()
- 리모트 웹 브라우저를 열기
> remote$closeWindow()
Rselenium 패키지 주요함수 3 : 웹사이트 접속
- 리모트 웹 브라우저가 열렸으면 원하는 웹 사이트에 접속할 수 있음
> remote$navigate(url = 'https://www.naver.com')
- 웹 사이트로 이동헀으면 해당 페이지의 HTML을 읽을 수 있음. JavaScript 등 동적인 기능이 모두 완료된 상태이므로 화면에 보이는 내용 그대로 가져올 수 있음. 이 과정에서 시간이 다소 소요됨
> html <- remote$getPageSource() %>% '[['(1)
Rselenium 패키지 주요함수 4 : HTML 요소 찾기
- 글자 입력 및 마우스 클릭 등의 행동을 하려면 해당 HTML 요소를 찾아야함.
- 사용자가 Selenium을 이용하여 특정 동작을 제어하기 위해 해당 HTML 요소의 XPath, CSS Selector로 지정해주어야함
- 네이버 메인 화면 상단 검색의 위치를 xpath로 지정
> query <- remote$findElement(using = 'xpath',
value = '//*[@id="query"]')
- CSS selector도 가능
> query <- remote$findElement(using = 'css',
value = '#query')
Rselenium 패키지 주요함수 5 : 글자 입력
- 글자 입력창에 원하는 글자를 입력할 수 있음
- 입력할 곳을 지정한 다음 원하는 글자를 입력하는 방식
- 네이버의 검색창의 HTML 요소를 'query'로 지정하였으므로, 여기에 검색어 입력 가능
- 네이버 검색창에 검색어를 입력하는 example
> query$sendKeysToElement(sendKeyw = list('미세먼지'))
Rselenium 패키지 주요함수 6 : 버튼 클릭
- 버튼에 해당하는 HTML 요소의 xpath지정
- 버튼 관련 태그는 보통 <button>
queryBtn <- remote$findElement(using = 'xpath',
value = '//*[@id="search_btn"]')
# 돋보기 버튼을 클릭
queryBtn$clickElement()
Rselenium 패키지 주요함수 7 : 페이지 이동
- 이전 페이지 이동
> remote$goBack()
- 다음 페이지 이동
> remote$goForward()
- 새로고침
> remote$refresh()
Rselenium 패키지 주요함수 8 : 창 이동 및 팝업 제거
- 새로운 웹 페이지를 열고 팝업이 생겼을 때 팝업 제거가 가능
- 팝업은 새로운 창(window)으로 인식되므로 현재 열려있는 리모트 웹 브라우저의 window id 를 확인한 뒤 해당 window id 로 옮긴(swich) 후 버튼을 클릭하는 방식으로 팝업 제거 가능
> windowids <- remote$getWindowHandles()
> pipup <- remote$switchToWindow(windowid = windowid[[2]])
> closeBtn <- remote$findElement(using = 'xpath', value = 'btn html')
> closeBtn$clickElement()
Rselenium 패키지 주요함수 9 : 경고 확인 및 제거
- 경고 문구 출력
> remote$getAlertText()
- 경고 수용 (ok)
> remote$acceptAlert()
- 경고 무시 (cancel)
> remote$dismissAlert()
<Copyright 2019. @hotorch. All rights reserved.>
'Programming > R' 카테고리의 다른 글
R 정규표현식 기본문법 (0) | 2021.07.17 |
---|---|
[Crawling] R stringr 패키지 사용법 (0) | 2021.07.06 |
[Crawling] JavaScript가 사용된 Webpage 긁기 (0) | 2021.06.22 |
[Crawling] XML, JSON in R (0) | 2021.06.17 |
[Crawling] 용어 다지기 및 Tutorial (0) | 2021.06.05 |
Uploaded by Notion2Tistory v1.1.0