R:将 Chromium 与 Selenium 一起使用,而不是 Chrome

R: Using Chromium with Selenium instead of Chrome

提问人:stats_noob 提问时间:11/16/2023 更新时间:11/24/2023 访问量:25

问:

我正在使用 R 编程语言。

我的问题:我有以下 R Selenium 脚本,它以前(2023 年 8 月)以前可以工作,但现在不起作用(2023 年 11 月):

library(RSelenium)
 library(wdman)
 library(netstat)
 
 selenium()
   # checking Selenium Server versions:
#BEGIN: PREDOWNLOAD
#BEGIN: DOWNLOAD
#BEGIN: POSTDOWNLOAD
#....
#BEGIN: DOWNLOAD
#BEGIN: POSTDOWNLOAD
#$process
#PROCESS 'file27547a8c5781.bat', running, pid 14124.
    
binman::list_versions("chromedriver")
#$win32
#[1] "113.0.5672.63" "114.0.5735.16" "114.0.5735.90"

 seleium_object <- selenium(retcommand = T, check = F)
 
 remote_driver <- rsDriver(browser = "chrome", chromever = "119.0.6045.105", verbose = F, port = free_port())

但是,这会导致以下错误:

 Error in chrome_ver(chromecheck[["platform"]], chromever) : 
  version requested doesnt match versions available = 113.0.5672.63,114.0.5735.16,114.0.5735.90

enter image description here

我的问题:在上一个问题中(R:是否可以直接在 R 中下载最新版本的 Google Chrome?),我被告知我可以通过使用 Chromium (https://www.chromium.org/getting-involved/download-chromium/) 而不是 Google Chrome 来解决这个问题。但我以前从未使用过 Chromium - 我不确定如何安装它以及如何修改脚本的其余部分以使其与 Chromium 一起使用:

# rest of R/selenium script (currently does not work)
#remDr =  remote_driver
#remDr$navigate("https://www.google.com/maps")


# Search for the CN Tower
#search_box <- remDr$findElement(using = 'css selector', "#searchboxinput")
#search_box$sendKeysToElement(list("CN Tower", key = "enter"))

#Sys.sleep(5)

# Get the URL of the current page
#url <- remDr$getCurrentUrl()[[1]]

# Extract the longitude and latitude from the URL
#long_lat <- gsub(".*@(-?[0-9.]+),(-?[0-9.]+),.*", "\\1,\\2", url)
#long_lat <- unlist(strsplit(long_lat, ","))

有人可以告诉我如何正确安装 chromium (例如,这可以直接使用 R 命令(例如 System() 或 shell.exec() )完成吗)以及如何修改我的 R selenium 脚本的其余部分,以便它与 Chromium 一起使用?

谢谢!

> sessionInfo()
R version 4.1.3 (2022-03-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22621)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252    LC_MONETARY=English_Canada.1252 LC_NUMERIC=C                   
[5] LC_TIME=English_Canada.1252    

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

other attached packages:
[1] netstat_0.1.2   wdman_0.2.6     RSelenium_1.7.9 duckdb_0.7.1-1  DBI_1.1.3      

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.8.3       rstudioapi_0.13    xml2_1.3.3         knitr_1.39         rappdirs_0.3.3     R6_2.5.1           rlang_1.0.6       
 [8] fastmap_1.1.0      httr_1.4.4         caTools_1.18.2     tools_4.1.3        xfun_0.30          binman_0.1.3       tinytex_0.45      
[15] KernSmooth_2.23-20 cli_3.4.1          e1071_1.7-9        semver_0.2.0       htmltools_0.5.3    class_7.3-20       yaml_2.3.5        
[22] digest_0.6.29      assertthat_0.2.1   processx_3.8.0     ps_1.7.2           bitops_1.0-7       curl_4.3.2         evaluate_0.19     
[29] rmarkdown_2.14     proxy_0.4-26       compiler_4.1.3     classInt_0.4-3     jsonlite_1.8.4  
r selenium-web驱动程序

评论


答:

0赞 stats_noob 11/24/2023 #1

我能够解决这个问题(和朋友一起)。

  • 首先,我访问了 Google Chrome 驱动程序网站:https://chromedriver.chromium.org/downloads -> https://googlechromelabs.github.io/chrome-for-testing/

  • 然后,我下载了我想要的驱动程序的文件(2023 年 11 月 23 日,我下载了最新的可用版本,ChromeDriver 114.0.5735.90)

  • 然后,我解压缩了这个文件的内容,并用驱动程序的名称创建了一个新文件夹(我调用了该文件夹......这与我当前使用的 Google Chrome 版本相同:119.0.6045.160119.0.6045.160 )

  • 注意:我下载的驱动程序名称与我当前使用的谷歌浏览器版本不匹配

  • 然后,我将这个新创建的文件夹的内容粘贴到以下文件夹中:C:\Users\me\AppData\Local\binman\binman_chromedriver\win32

最后,我运行了以下代码,一切正常!

library(RSelenium)
library(wdman)
library(netstat)

selenium()
seleium_object <- selenium(retcommand = T, check = F)

# chromever has the same name as the file I downloaded
remote_driver <- rsDriver(browser = "chrome", chromever = "119.0.6045.160", verbose = F, port = free_port())

remDr<- remote_driver$client

lat <- 45.5048
lon <- -73.5772


URL <- paste0("https://www.google.com/maps/search/pizza/@", lat, ",", lon, ",17z/data=!3m1!4b1!4m6!2m5!3m4!2s", lat, ",", lon, "!4m2!1d", lon, "!2d", lat, "?entry=ttu")

remDr$navigate(URL)