下載完後將檔案解壓縮到 Chrome.exe 所在的資料夾,以下為範例路徑
C:\Program Files (x86)\Google\Chrome\Application
再到環境變數的 PATH 增加 C:\Program Files (x86)\Google\Chrome\Application;
若無 PATH 請自行新增
java -jar selenium-server-standalone-3.4.0.jar
remDr <- remoteDriver(browserName = “chrome”)
remDr$open()
remDr$navigate(‘https://www.artprice.com/’)
remDr$findElement()
remDr$findElements()
remDr$getCurrentUrl()
remDr$goBack()
函數名稱非常直觀
remDr$navigate(url = 'https://tw.yahoo.com/')
test <- remDr$findElement(using = 'css',value = '#UHSearchBox')
test$setElementAttribute(attributeName = 'value',value = 'NSYSU')
test$submitElement()
# 完成搜尋之後,使用 goBack() 返回上一頁
remDr$goBack()
test$setElementAttribute(attributeName = 'value',value = 'NSYSU')
# 直接執行 setElementAttribute() 會遇到 error
# 必須再執行一次 remDr$findElement()
test <- remDr$findElement(using = 'css',value = '#UHSearchBox')
test$setElementAttribute(attributeName = 'value',value = 'NSYSU')
remDr <- remoteDriver(browserName = "chrome")
remDr$open()
remDr$navigate('https://www.artprice.com/')
以下使用 css (Copy selector) 操作,亦可選擇 Xpath
#Xpath寫法
# remDr$findElement('xpath','//*[@id="sln_searchbar"]')
input <- remDr$findElement('css','#sln_searchbar')
input$setElementAttribute(attributeName = 'value',value = 'AHAE')
input$submitElement()
在remDr中,沒有 setElementAttribute()
cl<-makeCluster(4,"SOCK")
registerDoParallel(cl)
cc <- function(pf,pt){
nlist <<- list()
remDr <- remoteDriver(browserName = "chrome")
remDr$open()
remDr$navigate('https://www.artprice.com/')
for(i in pf:pt){
ser <- remDr$findElement('css','#sln_searchbar')
ser$setElementAttribute('value',artist_korean$姓名[i] %>% as.character())
ser$submitElement()
uu <- remDr$getCurrentUrl()
if(isTRUE(grepl('search?',uu))){
tryCatch(nn <- remDr$findElement('css','body > div.container-fluid.font.font-14 > div:nth-child(2) > div > div.row.artist-content > div > table > tbody > tr.visible-xs > td > p:nth-child(1) > a'),
error = function(e){nn <<- 'na'})
tryCatch(nlist <<- c(nlist,nn$getElementAttribute(attrName = 'href')),
error = function(e){nlist <<- c(nlist,'na')})
} else { nlist <<- c(nlist,uu)}
Sys.sleep(1)
remDr$goBack()
}
return(nlist)
}
最後輸出結果存在 zz 變數中
zz <- foreach(i = 1:4,.combine = 'c',.packages = c('tidyverse','RSelenium')) %dopar% {
switch(i,
cc(pf = 1,pt = 330),
cc(pf = 331,pt = 660),
cc(pf = 661,pt = 990),
cc(pf = 991,pt = 1322))
}
stopImplicitCluster()
stopCluster(cl)