Giter Club home page Giter Club logo

webdriver's Introduction

webdriver

'WebDriver' Client for 'PhantomJS'

Linux Build Status Windows Build status CRAN RStudio mirror downloads Coverage Status

A client for the 'WebDriver' 'API'. It allows driving a (probably headless) web browser, and can be used to test web applications, including 'Shiny' apps. In theory it works with any 'WebDriver' implementation, but it was only tested with 'PhantomJS'.

Installation

source("https://install-github.me/rstudio/webdriver")

Usage

library(webdriver)

PhantomJS

webdriver uses PhantomJS as a headless web browser. (In theory in works with other WebDriver clients as well.) You can use the install_phantomjs() function to download and install PhantomJS on your system. Alternatively an installation that is in the PATH is sufficient.

The run_phantomjs() function starts PhantomJS, and waits until it is ready to serve queries. It returns a process object that you can terminate manually, and the port on which PhantomJS is listening.

pjs <- run_phantomjs()
pjs
## $process
## PROCESS 'phantomjs', running, pid 45932.
## 
## $port
## [1] 5793

Sessions

Use the Session class to connection to a running PhantomJS process. One process can save multiple sessions, and the sessions are independent of each other.

ses <- Session$new(port = pjs$port)

Once a session is established, you can manipulate the headless web browser through it:

ses$go("https://r-pkg.org/pkg/callr")
ses$getUrl()
## [1] "https://r-pkg.org/pkg/callr"
ses$getTitle()
## [1] "callr @ METACRAN"

You can also take a screenshot of the whole web page, and show it on R's graphics device, or save it to a PNG file:

ses$takeScreenshot()

plot of chunk screenshot-1

HTML elements

The Session object has two methods to find HTML elements on the current web page, which can then be further manipulated: findElement() and findElements(). They work with CSS or XPATH selectors, and also with (possibly partial) HTML text.

install <- ses$findElement(".install-package")
install$getName()
## [1] "div"
install$getText()
## [1] "install.packages(\"callr\")"

If you have an HTML element that can receive keyboard keys, you can use the sendKeys() method to send them. The key list helps with sending special, characters, e.g. key$enter corresponds to pressing ENTER. For example we can type into a search box:

search <- ses$findElement("#cran-input")
search$sendKeys("html", key$enter)
ses$getUrl()
## [1] "https://r-pkg.org/search.html?q=html"
ses$getTitle()
## [1] "METACRAN search results"
ses$takeScreenshot()

plot of chunk screenshot-2

JavaScript

The executeScript() method of a Session object runs arbitrary JavaScript in the headless browser. It puts the supplied code into the body of a JavaScript function, and the function will receive the additional arguments, in its arguments array. Element objects as arguments are automatically converted to the corresponding DOM elements in the browser.

The JavaScript function can return values to R. Returned HTML elements are automatically converted to Element objects.

ses$executeScript("return 42 + 'foobar';")
## [1] "42foobar"
search2 <- ses$executeScript("return document.getElementById('cran-input');")
search2$getName()
## [1] "input"

Element objects also have an executeScript() method, which works the same way as the Session method, but it automatically supplies the HTML element as the first argument of the JavaScript function.

executeScript() works synchronously. If you need asynchronous execution, you can use the executeScriptAsync() function.

License

MIT © Mango Solutions, RStudio

webdriver's People

Contributors

gaborcsardi avatar wch avatar

Watchers

mkhoin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.