2017-07-25 107 views
1

我想學習使用RSelenium。我堅持試圖使用rsDriver啓動服務器。我只是試圖運行下面的代碼,並得到了以下錯誤:RSelenium rsDriver peer SSL證書問題

rD <- rsDriver() 
checking Selenium Server versions: 
BEGIN: PREDOWNLOAD 
Error in open.connection(con, "rb") : 
    Peer certificate cannot be authenticated with given CA certificates 

我周圍中搜索堆棧溢出,並發現我們可以給選項使用下面rsDriver,但我仍然有錯誤:

my_extra <- list("--ignore-ssl-errors=true", "--ssl-protocol=tlsv1", "--web-security=no") 
rs <- rsDriver(extraCapabilities = my_extra) 
checking Selenium Server versions: 
BEGIN: PREDOWNLOAD 
Error in open.connection(con, "rb") : 
    Peer certificate cannot be authenticated with given CA certificates 

還有什麼我不見了?

爲HTTR :: GET功能,我可以使用繞過SSL證書:

set_config(config(ssl_verifypeer=0L)). 

但這種方法不適用於RSelenium :: rsDriver工作。

這裏是我的系統規格: 我的操作系統:Microsoft Windows 10

R version 3.4.1 (2017-06-30) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200) 

Matrix products: default 

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RCurl_1.95-4.8 bitops_1.0-6 httr_1.2.1  wdman_0.2.2  
[5] RSelenium_1.7.1 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.12  XML_3.98-1.9  binman_0.1.0  assertthat_0.2.0 
[5] R6_2.2.2   jsonlite_1.5  semver_0.2.0  curl_2.7   
[9] tools_3.4.1  yaml_2.1.14  compiler_3.4.1 caTools_1.17.1 
[13] openssl_0.9.6 
+0

看到的是https:

jsonlite::fromJSON("https://www.googleapis.com/storage/v1/b/selenium-release/o") 

您可以使用類似mock相關curl fundtion: //github.com/johndharrison/wdman/issues/9 – jdharrison

+0

我試過這個命令:** httr :: with_config(config(ssl_verifypeer = 0L),wdman :: selenium(retcommand = TRUE))**。但仍然無效。完全相同的錯誤:對等證書不能使用給定的CA證書進行認證。有沒有其他的方式來啓動服務器?也許使用其他方法,我可以通過一個「忽略SSL證書」命令? – addicted

+0

問題出在'jsonlite :: fromJSON'上。基礎包'curl'需要傳遞'ssl_verifypeer'參數。在給定的問題上,你可以通過模擬函數來做到這一點。 – jdharrison

回答

1

rsDriver使用binman包辦理相關的二進制文件的下載。硒項目列出了它在一個JSON文件發佈在https://www.googleapis.com/storage/v1/b/selenium-release/o 你應該有同樣的問題,如果你嘗試:

my_new_handle <- function(...){ 
    print("mocking") 
    h <- .Call(curl:::R_new_handle, PACKAGE = "curl") 
    curl:::handle_setopt(h, ..., ssl_verifypeer = FALSE) 
    h 
} 
testthat::with_mock(
    `curl::new_handle` = my_new_handle, 
    { 
    selCommand <- httr::with_config(config(ssl_verifypeer=0L),wdman::selenium(‌​retcommand=TRUE)) 
    } 
) 
+0

你說得對。我確實與jsonlite有同樣的問題。但是,我設法使用您提供的設置功能下載seleniumserver,chromedriver,firefoxdriver和phantomjs。我是否還必須繼續使用模擬命令以及rsDriver? – addicted

+0

下載驅動程序後,您可以在'rsDriver'中將'check = FALSE'設置爲參數,並且不應檢查更新的驅動程序。 – jdharrison

+0

我把check = FALSE,但是rsDriver仍然檢查硒服務器版本。 (我知道這個離題了,但是我仍然試圖讓rsDriver工作。) – addicted