The webshot package makes it easy to take screenshots of web pages from R. It requires an installation of the external program PhantomJS (you may use webshot::install_phantomjs() to install PhantomJS, if you do not want to download the binary and put it in PATH manually).

The main function in this package is webshot(). Below are some examples of taking screenshots of the website http://rstudio.github.io/leaflet/:

library(webshot)
URL <- "http://rstudio.github.io/leaflet/"
# Might need a longer delay for all assets to display
webshot(URL, delay = 0.5)
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
# Clip to the viewport
webshot(URL, cliprect = "viewport")
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
# Manual clipping rectangle
webshot(URL, cliprect = c(200, 5, 400, 300))
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
# Using CSS selectors to pick out regions
webshot(URL, selector = ".list-group")
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
webshot(URL, selector = c("#features", "#installation"))
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
# Expand selection region
webshot(URL, selector = "#installation", expand = c(10, 50, 0, 50))
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
# If multiple matches for a given selector, it uses the first match
webshot(URL, selector = "p")
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
webshot("https://github.com/rstudio/shiny/", selector = "ul.numbers-summary")
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.

If you are familiar with JavaScript, you may run some JavaScript code on the page before taking the screenshot. Here is an example of logging into reddit:

# Send commands to eval
webshot("http://www.reddit.com/", "reddit-input.png",
  selector = c("#search", "#login_login-main"),
  eval = "casper.then(function() {
    // Check the remember me box
    this.click('#rem-login-main');
    // Enter username and password
    this.sendKeys('#login_login-main input[type=\"text\"]', 'my_username');
    this.sendKeys('#login_login-main input[type=\"password\"]', 'password');

    // Now click in the search box. This results in a box expanding below
    this.click('#search input[type=\"text\"]');
    // Wait 500ms
    this.wait(500);
  });"
)

You can also take screenshots of Shiny apps using the appshot() function, e.g.

appdir <- system.file("examples", "01_hello", package="shiny")
appshot(appdir, delay = 3)

There are two functions resize() and shrink() to manipulate images, which require GraphicsMagick (or ImageMagick) and OptiPNG, respectively. A simple example:

# Result can be piped to other commands like resize() and shrink()
webshot("https://www.r-project.org/", "r-small.png") %>%
 resize("75%") %>%
 shrink()