RSelenium连接服务器失败:无法确定服务器状态问题求助
我在使用RSelenium爬取JavaScript驱动网站的数据时遇到了服务器连接问题,恳请帮助。
当前代码
## R Selenium ## install.packages("netstat") library(RSelenium) library(tidyverse) library(netstat) port1 <- 9515 port1 <- as.integer(port1) ## start the server ## rs_driver_object <- rsDriver(browser = "chrome", port = free_port())
运行报错信息
"Could not open chrome browser.
Client error message:
Undefined error in httr call. httr output: Failed to connect to localhost port 14415 after 2252 ms: Connection refused
Check server log for further details.
Warning message:
In rsDriver(browser = "chrome", port = free_port()) :
Could not determine server status."
排查日志
执行以下代码:
selServ <- wdman::selenium(verbose = FALSE) selServ$log()
得到日志:
$stderr [1] "Fehler: Hauptklasse c(-Dwebdriver.chrome.driver=\"C:\\Users\\MarcF\\AppData\\Local\\binman\\binman_chromedriver\\win32\\113.0.5672.24.chromedriver.exe\", konnte nicht gefunden oder geladen werden" [2] "Ursache: java.lang.ClassNotFoundException: c(-Dwebdriver.chrome.driver=\"C:\\Users\\MarcF\\AppData\\Local\\binman\\binman_chromedriver\\win32\\113.0.5672.24.chromedriver.exe\"," $stdout character(0)
会话信息
R version 4.2.2 (2022-10-31 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 19044) Matrix products: default locale: [1] LC_COLLATE=German_Germany.utf8 LC_CTYPE=German_Germany.utf8 LC_MONETARY=German_Germany.utf8 [4] LC_NUMERIC=C LC_TIME=German_Germany.utf8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] netstat_0.1.2 forcats_0.5.2 stringr_1.5.0 dplyr_1.1.0 purrr_1.0.1 readr_2.1.3 tidyr_1.3.0 [8] tibble_3.1.8 ggplot2_3.4.1 tidyverse_1.3.2 RSelenium_1.7.9 loaded via a namespace (and not attached): [1] tidyselect_1.2.0 haven_2.5.1 gargle_1.2.1 colorspace_2.1-0 vctrs_0.5.2 [6] generics_0.1.3 yaml_2.3.7 utf8_1.2.3 rlang_1.0.6 pillar_1.8.1 [11] withr_2.5.0 glue_1.6.2 DBI_1.1.3 rappdirs_0.3.3 dbplyr_2.2.1 [16] readxl_1.4.1 semver_0.2.0 modelr_0.1.10 lifecycle_1.0.3 munsell_0.5.0 [21] binman_0.1.3 gtable_0.3.1 cellranger_1.1.0 rvest_1.0.3 caTools_1.18.2 [26] wdman_0.2.6 tzdb_0.3.0 ps_1.7.2 curl_5.0.0 fansi_1.0.4 [31] broom_1.0.3 Rcpp_1.0.9 backports_1.4.1 scales_1.2.1 googlesheets4_1.0.1 [36] jsonlite_1.8.4 fs_1.5.2 hms_1.1.2 stringi_1.7.8 processx_3.8.0 [41] grid_4.2.2 cli_3.4.1 tools_4.2.2 bitops_1.0-7 magrittr_2.0.3 [46] crayon_1.5.2 pkgconfig_2.0.3 ellipsis_0.3.2 xml2_1.3.3 reprex_2.0.2 [51] googledrive_2.0.0 lubridate_1.9.1 timechange_0.1.1 assertthat_0.2.1 httr_1.4.4 [56] rstudioapi_0.14 R6_2.5.1 compiler_4.2.2
解决方案
从日志看,问题根源是ChromeDriver的启动参数被错误解析,Java无法找到指定主类,本质是wdman传递ChromeDriver路径时出现格式错误。可按以下步骤解决:
手动指定ChromeDriver路径启动服务
先确认日志中的ChromeDriver路径,再用wdman::selenium手动配置启动:# 关闭残留服务 if(exists("selServ")) selServ$stop() # 启动Selenium服务 selServ <- wdman::selenium( port = free_port(), chromever = "113.0.5672.24", # 匹配你的ChromeDriver版本 extraCapabilities = list( chromeOptions = list( args = c("--no-sandbox", "--disable-dev-shm-usage") ) ) ) # 连接服务 remDr <- remoteDriver( remoteServerAddr = "localhost", port = selServ$port, browserName = "chrome" ) remDr$open()检查Chrome与ChromeDriver版本匹配
确保Chrome浏览器版本和ChromeDriver版本完全一致(日志中为113.0.5672.24),版本不匹配会导致启动失败。可通过binman::list_versions("chromedriver")查看已安装版本,或下载对应版本替换。清理binman缓存
若驱动文件损坏,清理后重新下载:binman::uninstall("chromedriver", version = "113.0.5672.24") binman::install_chromedriver(version = "113.0.5672.24")直接启动ChromeDriver进程
绕过rsDriver,手动启动ChromeDriver再连接:# 启动ChromeDriver chromedriver_path <- "C:\\Users\\MarcF\\AppData\\Local\\binman\\binman_chromedriver\\win32\\113.0.5672.24.chromedriver.exe" system(paste0(chromedriver_path, " --port=9515"), wait = FALSE) # 连接 remDr <- remoteDriver(port = 9515, browserName = "chrome") remDr$open()
内容的提问来源于stack exchange,提问作者QuantaAgora1995

