This represents one session in a Chromote object. Note that in the Chrome DevTools Protocol a session is a debugging session connected to a target, which is a browser window/tab or an iframe.
A single target can potentially have more than one session connected to it, but this is not currently supported by chromote.
parentChromote object
default_timeoutDefault timeout in seconds for chromote to wait for a Chrome DevTools Protocol response.
protocolDynamic protocol implementation. For expert use only!
new()Create a new ChromoteSession object.
# Create a new `ChromoteSession` object.
b <- ChromoteSession$new()# Create a ChromoteSession with a specific height,width
b <- ChromoteSession$new(height = 1080, width = 1920)
# Navigate to page
b$Page$navigate("http://www.r-project.org/")
# View current chromote session
if (interactive()) b$view()
ChromoteSession$new(
  parent = default_chromote_object(),
  width = 992,
  height = 1323,
  targetId = NULL,
  wait_ = TRUE,
  auto_events = NULL
)parentChromote object to use; defaults to
default_chromote_object()
width, heightWidth and height of the new window.
targetIdTarget
ID of an existing target to attach to. When a targetId is provided, the
width and height arguments are ignored. If NULL (the default) a new
target is created and attached to, and the width and height
arguments determine its viewport size.
wait_If FALSE, return a promises::promise() of a new
ChromoteSession object. Otherwise, block during initialization, and
return a ChromoteSession object directly.
auto_eventsIf NULL (the default), use the auto_events setting
from the parent Chromote object. If TRUE, enable automatic
event enabling/disabling; if FALSE, disable automatic event
enabling/disabling.
A new ChromoteSession object.
view()Display the current session in the Chromote browser.
If a Chrome browser is being used, this method will open a new tab
using your Chrome browser. When not using a Chrome browser, set
options(browser=) to change the default behavior of browseURL().
# Create a new `ChromoteSession` object.
b <- ChromoteSession$new()# Navigate to page
b$Page$navigate("http://www.r-project.org/")
# View current chromote session
if (interactive()) b$view()
ChromoteSession$view()
close()Close the Chromote session.
# Create a new `ChromoteSession` object.
b <- ChromoteSession$new()# Navigate to page
b$Page$navigate("http://www.r-project.org/")
# Close current chromote session
b$close()
ChromoteSession$close(wait_ = TRUE)wait_If FALSE, return a promises::promise() that will resolve
when the ChromoteSession is closed. Otherwise, block until the
ChromoteSession has closed.
screenshot()Take a PNG screenshot
# Create a new `ChromoteSession` object.
b <- ChromoteSession$new()# Navigate to page
b$Page$navigate("http://www.r-project.org/")
# Take screenshot
tmppngfile <- tempfile(fileext = ".png")
is_interactive <- interactive() # Display screenshot if interactive
b$screenshot(tmppngfile, show = is_interactive)
# Show screenshot file info
unlist(file.info(tmppngfile))
# Take screenshot using a selector
sidebar_file <- tempfile(fileext = ".png")
b$screenshot(sidebar_file, selector = ".sidebar", show = is_interactive)
# ----------------------------
# Take screenshots in parallel
urls <- c(
  "https://www.r-project.org/",
  "https://github.com/",
  "https://news.ycombinator.com/"
)
# Helper method that:
# 1. Navigates to the given URL
# 2. Waits for the page loaded event to fire
# 3. Takes a screenshot
# 4. Prints a message
# 5. Close the ChromoteSession
screenshot_p <- function(url, filename = NULL) {
  if (is.null(filename)) {
    filename <- gsub("^.*://", "", url)
    filename <- gsub("/", "_", filename)
    filename <- gsub("\\.", "_", filename)
    filename <- sub("_$", "", filename)
    filename <- paste0(filename, ".png")
  }
  b2 <- b$new_session()
  b2$Page$navigate(url, wait_ = FALSE)
  b2$Page$loadEventFired(wait_ = FALSE)$
    then(function(value) {
      b2$screenshot(filename, wait_ = FALSE)
    })$
    then(function(value) {
      message(filename)
    })$
    finally(function() {
      b2$close()
    })
}
# Take multiple screenshots simultaneously
ps <- lapply(urls, screenshot_p)
pa <- promises::promise_all(.list = ps)$then(function(value) {
  message("Done!")
})
# Block the console until the screenshots finish (optional)
b$wait_for(pa)
#> www_r-project_org.png
#> github_com.png
#> news_ycombinator_com.png
#> Done!
ChromoteSession$screenshot(
  filename = "screenshot.png",
  selector = "html",
  cliprect = NULL,
  region = c("content", "padding", "border", "margin"),
  expand = NULL,
  scale = 1,
  show = FALSE,
  delay = 0.5,
  options = list(),
  wait_ = TRUE
)filenameFile path of where to save the screenshot. The format of
the screenshot is inferred from the file extension; use
options = list(format = "jpeg") to manually choose the format. See
Page.captureScreenshot
for supported formats; at the time of this release the format options
were "png" (default), "jpeg", or "webp".
selectorCSS selector to use for the screenshot.
cliprectAn unnamed vector or list containing values for top,
left, width, and height, in that order. See
Page.Viewport
for more information. If provided, selector and expand will be
ignored. To provide a scale, use the scale parameter.
regionCSS region to use for the screenshot.
expandExtra pixels to expand the screenshot. May be a single value or a numeric vector of top, right, bottom, left values.
scalePage scale factor
showIf TRUE, the screenshot will be displayed in the viewer.
delayThe number of seconds to wait before taking the screenshot after resizing the page. For complicated pages, this may need to be increased.
optionsAdditional options passed to
Page.captureScreenshot.
wait_If FALSE, return a promises::promise() that will resolve
when the ChromoteSession has saved the screenshot. Otherwise, block
until the ChromoteSession has saved the screenshot.
screenshot_pdf()Take a PDF screenshot
# Create a new `ChromoteSession` object.
b <- ChromoteSession$new()# Navigate to page
b$Page$navigate("http://www.r-project.org/")
# Take screenshot
tmppdffile <- tempfile(fileext = ".pdf")
b$screenshot_pdf(tmppdffile)
# Show PDF file info
unlist(file.info(tmppdffile))
ChromoteSession$screenshot_pdf(
  filename = "screenshot.pdf",
  pagesize = "letter",
  margins = 0.5,
  units = c("in", "cm"),
  landscape = FALSE,
  display_header_footer = FALSE,
  print_background = FALSE,
  scale = 1,
  wait_ = TRUE
)filenameFile path of where to save the screenshot.
pagesizeA single character value in the set "letter",
"legal", "tabloid", "ledger" and "a0" through "a1". Or a
numeric vector c(width, height) specifying the page size.
marginsA numeric vector c(top, right, bottom, left) specifying
the page margins.
unitsPage and margin size units. Either "in" or "cm" for
inches and centimeters respectively.
landscapePaper orientation.
display_header_footerDisplay header and footer.
print_backgroundPrint background graphics.
scalePage scale factor.
wait_If FALSE, return a promises::promise() that will resolve
when the ChromoteSession has saved the screenshot. Otherwise, block
until the ChromoteSession has saved the screnshot.
new_session()Create a new tab / window
b1 <- ChromoteSession$new()
b1$Page$navigate("http://www.google.com")
b2 <- b1$new_session()
b2$Page$navigate("http://www.r-project.org/")
b1$Runtime$evaluate("window.location", returnByValue = TRUE)$result$value$href
#> [1] "https://www.google.com/"
b2$Runtime$evaluate("window.location", returnByValue = TRUE)$result$value$href
#> [1] "https://www.r-project.org/"
ChromoteSession$new_session(
  width = 992,
  height = 1323,
  targetId = NULL,
  wait_ = TRUE
)width, heightWidth and height of the new window.
targetIdTarget
ID of an existing target to attach to. When a targetId is provided, the
width and height arguments are ignored. If NULL (the default) a new
target is created and attached to, and the width and height
arguments determine its viewport size.
wait_If FALSE, return a promises::promise() that will resolve
when the ChromoteSession has created a new session. Otherwise, block
until the ChromoteSession has created a new session.
get_session_id()Retrieve the session id
ChromoteSession$get_session_id()
respawn()Create a new session that connects to the same target (i.e. page) as this session. This is useful if the session has been closed but the target still exists.
ChromoteSession$respawn()
get_target_id()Retrieve the target id
ChromoteSession$get_target_id()
wait_for()Wait for a Chromote Session to finish. This method will block the R
session until the provided promise resolves. The loop from
$get_child_loop() will only advance just far enough for the promise to
resolve.
b <- ChromoteSession$new()# Async with promise
p <- b$Browser$getVersion(wait_ = FALSE)
p$then(str)
# Async with callback
b$Browser$getVersion(wait_ = FALSE, callback_ = str)
ChromoteSession$wait_for(p)pA promise to resolve.
debug_log()Send a debug log message to the parent Chromote object
b <- ChromoteSession$new()
b$parent$debug_messages(TRUE)
b$Page$navigate("https://www.r-project.org/")
#> SEND {"method":"Page.navigate","params":{"url":"https://www.r-project.org/"}| __truncated__}
# Turn off debug messages
b$parent$debug_messages(FALSE)
ChromoteSession$debug_log(...)...Arguments pasted together with paste0(..., collapse = "").
get_child_loop()later loop.
For expert async usage only.
ChromoteSession$get_child_loop()
send_command()Send command through Chrome DevTools Protocol.
For expert use only.
ChromoteSession$send_command(
  msg,
  callback = NULL,
  error = NULL,
  timeout = NULL
)msgA JSON-serializable list containing method, and params.
callbackMethod to run when the command finishes successfully.
errorMethod to run if an error occurs.
timeoutNumber of milliseconds for Chrome DevTools Protocol execute a method.
get_auto_events()Resolved auto_events value.
For internal use only.
ChromoteSession$get_auto_events()
invoke_event_callbacks()Immediately call all event callback methods.
For internal use only.
ChromoteSession$invoke_event_callbacks(event, params)eventA single event string
paramsA list of parameters to pass to the event callback methods.
mark_closed()Mark a session, and optionally, the underlying target, as closed. For internal use only.
ChromoteSession$mark_closed(target_closed)target_closedHas the underlying target been closed as well as the active debugging session?
is_active()Retrieve active status
Once initialized, the value returned is TRUE. If $close() has been
called, this value will be FALSE.
ChromoteSession$is_active()
check_active()Check that a session is active, erroring if not.
ChromoteSession$check_active()
get_init_promise()Initial promise
For internal use only.
ChromoteSession$get_init_promise()
print()Summarise the current state of the object.
ChromoteSession$print(..., verbose = FALSE)...Passed on to format() when verbose = TRUE
verboseThe print method defaults to a brief summary
of the most important debugging info; use verbose = TRUE tp
see the complex R6 object.