RSelenium의 경우 CRAN에서 내려왔기 때문에 install_version을 통해 과거 패키지를 다운받아야 한다.

#패키지 다운로드
if(!require('kma2'))
library('kma2')
## Loading required package: kma2
if (!require("RSelenium")) {
        install_version("binman", version = "0.1.0", repos = "https://cran.uni-muenster.de/")
        install_version("wdman", version = "0.2.2", repos = "https://cran.uni-muenster.de/")
        install_version("RSelenium", version = "1.7.1", repos = "https://cran.uni-muenster.de/")
    }
## Loading required package: RSelenium
    library(RSelenium)
    pack2(c("rvest", "httr", "stringr", "RCurl", "XML", "progress"))
## Loading required package: xml2
## Loading required package: bitops
## 
## Attaching package: 'XML'
## The following object is masked from 'package:rvest':
## 
##     xml

dir은 웹에서 다운로드 받을 위치지만 지금의 경우 인터넷으로 파일을 직접 받는게 아니기 때문에 무관 port는 4자리 정수로 현재 컴퓨터 내에 사용하지 않는 port여야 한다.

아래 과정은 인터넷을 켜기 위한 조건이다.

dir=NULL

  pJS <<- wdman::phantomjs(port = 4551L)
## checking phantomjs versions:
## BEGIN: PREDOWNLOAD
## BEGIN: DOWNLOAD
## BEGIN: POSTDOWNLOAD
  eCaps <<- list(chromeOptions = list(prefs = list(profile.default_content_settings.popups = 4553L, 
download.prompt_for_download = FALSE, download.default_directory = dir)))
  rD <<- rsDriver(extraCapabilities = eCaps)
## checking Selenium Server versions:
## BEGIN: PREDOWNLOAD
## BEGIN: DOWNLOAD
## BEGIN: POSTDOWNLOAD
## checking chromedriver versions:
## BEGIN: PREDOWNLOAD
## BEGIN: DOWNLOAD
## BEGIN: POSTDOWNLOAD
## checking geckodriver versions:
## BEGIN: PREDOWNLOAD
## BEGIN: DOWNLOAD
## BEGIN: POSTDOWNLOAD
## checking phantomjs versions:
## BEGIN: PREDOWNLOAD
## BEGIN: DOWNLOAD
## BEGIN: POSTDOWNLOAD
## [1] "Connecting to remote server"
## $acceptInsecureCerts
## [1] FALSE
## 
## $acceptSslCerts
## [1] FALSE
## 
## $applicationCacheEnabled
## [1] FALSE
## 
## $browserConnectionEnabled
## [1] FALSE
## 
## $browserName
## [1] "chrome"
## 
## $chrome
## $chrome$chromedriverVersion
## [1] "72.0.3626.7 (efcef9a3ecda02b2132af215116a03852d08b9cb)"
## 
## $chrome$userDataDir
## [1] "C:\\Users\\cj\\AppData\\Local\\Temp\\scoped_dir4832_28577"
## 
## 
## $cssSelectorsEnabled
## [1] TRUE
## 
## $databaseEnabled
## [1] FALSE
## 
## $`goog:chromeOptions`
## $`goog:chromeOptions`$debuggerAddress
## [1] "localhost:56181"
## 
## 
## $handlesAlerts
## [1] TRUE
## 
## $hasTouchScreen
## [1] FALSE
## 
## $javascriptEnabled
## [1] TRUE
## 
## $locationContextEnabled
## [1] TRUE
## 
## $mobileEmulationEnabled
## [1] FALSE
## 
## $nativeEvents
## [1] TRUE
## 
## $networkConnectionEnabled
## [1] FALSE
## 
## $pageLoadStrategy
## [1] "normal"
## 
## $platform
## [1] "Windows NT"
## 
## $proxy
## named list()
## 
## $rotatable
## [1] FALSE
## 
## $setWindowRect
## [1] TRUE
## 
## $takesHeapSnapshot
## [1] TRUE
## 
## $takesScreenshot
## [1] TRUE
## 
## $timeouts
## $timeouts$implicit
## [1] 0
## 
## $timeouts$pageLoad
## [1] 300000
## 
## $timeouts$script
## [1] 30000
## 
## 
## $unexpectedAlertBehaviour
## [1] "ignore"
## 
## $version
## [1] "71.0.3578.98"
## 
## $webStorageEnabled
## [1] TRUE
## 
## $webdriver.remote.sessionid
## [1] "bb83a3eb9c6036f3b8f6584c0a868353"
## 
## $id
## [1] "bb83a3eb9c6036f3b8f6584c0a868353"
  remDr <<- rD$client
#위의 경우 web 사이트를 켜고 아래의 경우 웹사이트를 켜지 않음.
#   pJS <- wdman::phantomjs(port = 4567L)
# remDr <- remoteDriver(port=4567L, browserName = 'chrome')
# remDr$open()

다나와 중고장터 사이트에서 자료 가져오기

편의상 자료의 종류를 j로 하였으며, j=1은 cpu , j=2는 ram 순으로 홈페이지와 같은 순서로 되어있다. i는 페이지 수를 나타낸다.

for(j in 1){
  remDr$navigate(paste0('http://dmall.danawa.com/v3/?controller=sale&methods=index&parentCategoryCode=1&childCategoryCode=',j,'#1'))
  source<-remDr$getPageSource()[[1]]

   
  a<-read_html(source)%>%html_nodes(css='.normal_group')%>%html_text()
  a<-strsplit(gsub('\\t','',a),'\\n')
  a<-a[[1]][a[[1]]!='']
  
  name<-a[seq(1,length(a),8)]
  id<-a[seq(3,length(a),8)]
  new_old<-a[seq(4,length(a),8)]
  direct<-a[seq(5,length(a),8)]
  date<-gsub('\\.','-',a[seq(6,length(a),8)])
  price<-(str_extract_all(a[seq(8,length(a),8)],'\\d+'))
  for(i in 1:length(price))price[[i]]<-paste(price[[i]],collapse='')
  price<-as.numeric(unlist(price))
  data<-data.frame(name,id,new_old,direct,date,price,stringsAsFactors = F)
  data[grep(':',data$date),'date']=as.character(Sys.Date())
  rownames(data)<-NULL

  for( i in 2:3 ){
    Sys.sleep(1)
    script<-paste0('javascript:movePage(',i,');return false;')
    remDr$executeScript(script,arg=1:2)
    source<-remDr$getPageSource()[[1]]
    a<-read_html(source)%>%html_nodes(css='.normal_group')%>%html_text()
    a<-strsplit(gsub('\\t','',a),'\\n')
    a<-a[[1]][a[[1]]!='']
    #자료가 8개 초과로 존재하면 실행
    if(length(a)>8){Sys.sleep(3)
      name<-a[seq(1,length(a),8)]
      id<-a[seq(3,length(a),8)]
      new_old<-a[seq(4,length(a),8)]
      direct<-a[seq(5,length(a),8)]
      date<-gsub('\\.','-',a[seq(6,length(a),8)])
      price<-(str_extract_all(a[seq(8,length(a),8)],'\\d+'))

      for(i in 1:length(price))price[[i]]<-paste(price[[i]],collapse='')
        price<-as.numeric(unlist(price))
        table<-data.frame(name,id,new_old,direct,date,price,stringsAsFactors = F)
        table[grep(':',table$date),'date']=as.character(Sys.Date())
        rownames(table)<-NULL
        #판매완료 자료 제거
        table<-table[table$direct!='판매완료',]
      }
    
  }
data=data[data$date==Sys.Date(),]  
}
head(data)
##                               name     id  new_old   direct       date
## 1 인텔 펜티엄 G2020 (아이비브릿지) gkgjgg 중고상품 직접거래 2019-01-21
##   price
## 1 15000
#아래 3개는 인터넷을 끄는 개념이라 생각하면 되며, 아래코드를 실행시키지 않거나 R을 꺼주지 않으면 포트가 계속활성화 된 상태로 유지된다.
# rD$server$stop()
# remDr$close()
# pJS$stop()