2017-07-25 76 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