This set of functions allows you to simulate a user interacting with a website, using forms and navigating from page to page.

  • Create a session with session(url)

  • Navigate to a specified url with session_jump_to(), or follow a link on the page with session_follow_link().

  • Submit an html_form with session_submit().

  • View the history with session_history() and navigate back and forward with session_back() and session_forward().

  • Extract page contents with html_element() and html_elements(), or get the complete HTML document with read_html().

  • Inspect the HTTP response with httr::cookies(), httr::headers(), and httr::status_code().

session(url, ...)


session_jump_to(x, url, ...)

session_follow_link(x, i, css, xpath, ...)




session_submit(x, form, submit = NULL, ...)



A URL, either relative or absolute, to navigate to.


Any additional httr config to use throughout the session.


A session.


A integer to select the ith link or a string to match the first link containing that text (case sensitive).


Elements to select. Supply one of css or xpath depending on whether you want to use a CSS selector or XPath 1.0 expression.


Elements to select. Supply one of css or xpath depending on whether you want to use a CSS selector or XPath 1.0 expression.


An html_form to submit


Which button should be used to submit the form?

  • NULL, the default, uses the first button.

  • A string selects a button by its name.

  • A number selects a button using its relative position.


s <- session("") s %>% session_jump_to("hadley-wickham.jpg") %>% session_jump_to("/") %>% session_history()
#> #> #> -
s %>% session_jump_to("hadley-wickham.jpg") %>% session_back() %>% session_history()
#> - #>
# \donttest{ s %>% session_follow_link(css = "p a") %>% html_elements("p")
#> Navigating to
#> {xml_nodeset (62)} #> [1] <p class="d-inline"><a style="color: #ffffff;font-size: .9em;" href="/bl ... #> [2] <p class="d-inline"><a href="/black-lives-matter"> <button class="pt-1 p ... #> [3] <p class="d-inline pl-0 pr-3 text-center"><a class="text-white" href="/b ... #> [4] <p>The premier IDE for R</p> #> [5] <p>RStudio anywhere using a web browser</p> #> [6] <p>Put Shiny applications online</p> #> [7] <p>Shiny, R Markdown, Tidyverse and more</p> #> [8] <p>Do, share, teach and learn data science</p> #> [9] <p>An easy way to access R packages</p> #> [10] <p>Let us host your Shiny applications</p> #> [11] <p>A single home for R &amp; Python Data Science Teams</p> #> [12] <p>RStudio for the Enterprise</p> #> [13] <p>Easily share your insights</p> #> [14] <p>Control and distribute packages</p> #> [15] <p>RStudio</p> #> [16] <p>RStudio Server</p> #> [17] <p>Shiny Server</p> #> [18] <p>R Packages</p> #> [19] <p>RStudio Cloud</p> #> [20] <p>RStudio Public Package Manager</p> #> ...
# }