OS <- .Platform$OS.type
# switch(OS, windows, unix)
#' @export
get_browser <- function() {
getOption("curlR.browser")
}
#' init_selenium
#'
#' @param browserName firefox or chrome
#' @references
#' 1. https://chromedriver.chromium.org/capabilities
#'
#' @examples
#' # init_selenium(6666)
#' # kill_selenium(6666)
#' @import glue
#' @importFrom RSelenium remoteDriver
#' @export
init_selenium <- function(port = 4444, ip = "localhost", browserName = "chrome") {
if (!detect_server()) server_start(port, browserName)
# chrome or gecko
eCap <- list()
if (OS == "windows") {
localappdata <- Sys.getenv("localappdata") %>% gsub("\\\\", "/", .)
chrome_binary <- sprintf("%s/Chromium/Application/chrome.exe", localappdata)
eCap <- list(`goog:chromeOptions` = list(binary = chrome_binary))
}
# https://chromedriver.chromium.org/capabilities
p <- RSelenium::remoteDriver(ip,
port = port,
extraCapabilities = eCap,
browserName = browserName
)
p$open()
options("curlR.browser" = p)
# p$maxWindowSize()
p
}
#' @rdname server_start
detect_server <- function(port = 4444) {
pid <- getPidByPort(port)
length(pid) > 0
}
#' start selenium server
#' @name server_start
#'
#' @export
server_start <- function(port = 4444, browserName = "chrome") {
# java -jar selenium-server-standalone-3.141.59.jar -port 4444
selenium <- system.file("bin/selenium-server-standalone-3.141.59.jar", package = "curlR")
dir <- dirname(selenium)
if (browserName == "firefox") {
prefix <- "gecko"
} else if (browserName == "chrome") {
prefix <- "chrome"
}
# chrome or gecko
if (OS == "windows") {
driver <- system.file(glue("bin/{prefix}driver.exe"), package = "curlR")
localappdata <- Sys.getenv("localappdata") %>% gsub("\\\\", "/", .)
chrome_binary <- sprintf("%s/Chromium/Application/chrome.exe", localappdata)
eCap <- list(`goog:chromeOptions` = list(binary = chrome_binary))
} else {
driver <- system.file(glue("bin/{prefix}driver"), package = "curlR")
eCap <- list()
}
# driver = "chromedriver.exe"
cmd <- glue("java -Dwebdriver.{prefix}.driver={driver} -jar {selenium} -port {port}")
print(cmd)
system(cmd, wait = FALSE)
Sys.sleep(1)
opt <- getOption("curlR")
opt$server <- TRUE
options(curlR = opt)
invisible()
}
#' @rdname init_selenium
#' @export
setup_selenium <- function() {
root <- system.file(package = "curlR") %>% paste0(., "/bin")
driver <- system.file("bin/chromedriver.exe", package = "curlR")
if (driver == "") {
cat("[curlR-bin] downloading ...\n")
unlink(root)
remote <- "https://gitlab.com/r-pkgs/curlr.bin"
system(glue("git clone {remote} {root}"))
} else {
cat("[ok] curlR-bin exist.\n")
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.