~hrbrmstr/splashr

24ff888965d7e38e9a28767adbcc1bb5b3f377fb — boB Rudis 1 year, 6 months ago dea91f5 + 029dae9
master cran
M .Rbuildignore => .Rbuildignore +1 -0
@@ 1,3 1,4 @@
^LICENSE\.md$
^.*\.Rproj$
^\.Rproj\.user$
^\.travis\.yml$

M .travis.yml => .travis.yml +19 -38
@@ 15,53 15,34 @@ env:
  matrix:
  include:
    - dist: trusty
    - dist: trusty
      r_check_args: '--ignore-vignettes'
      r_build_args: '--no-build-vignettes'
      addons:
        apt:
          update: true
          packages:
            - libmagick++-dev
            - librsvg2-dev
            - libwebp-dev
            - libpoppler-cpp-dev
            - libtesseract-dev
            - libleptonica-dev
            - tesseract-ocr-eng
            - r-cran-rgdal
            - libfftw3-dev
            - cargo
    - PIP="pip" RETICULATE_PYTHON="/usr/bin/python"
    - PYTHON=3 PIP="pip3" RETICULATE_PYTHON="/usr/bin/python3"

addons:
  apt:
    update: true
    sources:
      - sourceline: 'ppa:opencpu/imagemagick'
    packages:
      - libmagick++-dev
      - librsvg2-dev
      - libwebp-dev
      - libpoppler-cpp-dev
      - libtesseract-dev
      - libleptonica-dev
      - tesseract-ocr-eng
      - r-cran-rgdal
      - libfftw3-dev
      - cargo
   apt:
     update: true
     sources:
       - sourceline: 'ppa:opencpu/imagemagick'
       - sourceline: 'ppa:ubuntugis/ppa'
     packages:
       - libmagick++-dev
       - librsvg2-dev
       - libwebp-dev
       - libpoppler-cpp-dev
       - libtesseract-dev
       - libleptonica-dev
       - tesseract-ocr-eng
       - r-cran-rgdal
       - libfftw3-dev
       - cargo

bioc_packages:
  - EBImage

before_install:
  - docker pull scrapinghub/splash:3.0
  - docker run -p 5023:5023 -p 8050:8050 -p 8051:8051 -d scrapinghub/splash:3.0
  - docker pull scrapinghub/splash:3.2
  - docker run -p 5023:5023 -p 8050:8050 -p 8051:8051 -d scrapinghub/splash:3.2
  - docker ps -a
  - sudo apt-get -y install python${PYTHON}-pip python-dev python${PYTHON}-numpy
  - sudo $PIP install -U setuptools
  - sudo $PIP install -U docker
  - (while true; do echo 'Ping? Pong!'; sleep 500; done) &

r:


@@ 70,4 51,4 @@ r:
 - devel

after_success:
  - Rscript -e 'covr::codecov()'
\ No newline at end of file
  - Rscript -e 'covr::codecov()'

M DESCRIPTION => DESCRIPTION +2 -2
@@ 2,7 2,7 @@ Package: splashr
Type: Package
Title: Tools to Work with the 'Splash' 'JavaScript' Rendering and Scraping Service
Version: 0.6.0
Date: 2019-01-13
Date: 2019-02-24
Encoding: UTF-8
Authors@R: c(
    person("Bob", "Rudis", email = "bob@rud.is", role = c("aut", "cre"), 


@@ 18,7 18,7 @@ Description: 'Splash' <https://github.com/scrapinghub/splash> is a 'JavaScript' 
    page context; getting detailed rendering info in 'HAR' format.
URL: http://gitlab.com/hrbrmstr/splashr
BugReports: https://gitlab.com/hrbrmstr/splashr/issues
License: AGPL
License: MIT + file LICENSE
Suggests:
    testthat,
    tibble,

A LICENSE => LICENSE +2 -0
@@ 0,0 1,2 @@
YEAR: 2019
COPYRIGHT HOLDER: Bob Rudis

A LICENSE.md => LICENSE.md +21 -0
@@ 0,0 1,21 @@
# MIT License

Copyright (c) 2019 Bob Rudis

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

M NAMESPACE => NAMESPACE +6 -0
@@ 5,6 5,7 @@ S3method(as.data.frame,harentries)
S3method(as.data.frame,harentry)
S3method(print,splash_debug)
S3method(print,splash_json)
S3method(print,splashr)
export("%>%")
export(HARviewer)
export(HARviewerOutput)


@@ 77,11 78,16 @@ export(splash_version)
export(splash_wait)
export(start_splash)
export(stop_splash)
export(ua_android_samsung)
export(ua_apple_tv)
export(ua_chromecast)
export(ua_ios_safari)
export(ua_kindle)
export(ua_linux_chrome)
export(ua_linux_firefox)
export(ua_macos_chrome)
export(ua_macos_safari)
export(ua_ps4)
export(ua_splashr)
export(ua_win10_chrome)
export(ua_win10_firefox)

M NEWS.md => NEWS.md +4 -0
@@ 2,6 2,10 @@

* Switch Docker orchestration to the `stevedore` package
* Fixed minor check on as.data.frame functions
* Cleaned up splashr object printing
* Added Android, Kindle, Apple TV & Chromecast user agents and updated 
  other user agents
* Updated Travis config to not use old docker pkg components

0.5.0


M R/docker-splash.r => R/docker-splash.r +49 -13
@@ 2,6 2,7 @@
#'
#' @md
#' @param tag Splash Docker image tag to install
#' @return a `docker_image` object or `NULL` if an error occurred.
#' @export
#' @family splash_docker_helpers
#' @examples \dontrun{


@@ 9,9 10,23 @@
#' splash_container <- start_splash()
#' stop_splash(splash_container)
#' }
install_splash <- function(tag="3.2") {
install_splash <- function(tag="latest") {

  docker <- stevedore::docker_client()
  res <- docker$image$pull("scrapinghub/splash", tag=tag, stream=stdout())

  tryCatch(
    docker$image$pull("scrapinghub/splash", tag=tag, stream=stdout()),
    error = function(e) {
      message("Error pulling image from DockerHub.\n", e)
      return(NULL)
    },
    interrupt = function(e) {
      stop("Terminated by user", call. = FALSE)
    }
  ) -> res

  invisible(res)

}

#' Start a Splash server Docker container


@@ 19,6 34,10 @@ install_splash <- function(tag="3.2") {
#' If using this in an automation context, you should consider adding a
#' `Sys.sleep(3)` (or higher) after starting the docker container.
#'
#' This uses the `latest` image and passed the `--disable-browser-caches`
#' parameter. If you do not want to use the 3.2.x+ versions of `Splash`
#' you should use your own startup scripts vs this helper function.
#'
#' @param tag Splash Docker image tag to start
#' @note you need Docker running on your system and have pulled the container with
#'       [install_splash] for this to work. You should save the resultant


@@ 27,25 46,37 @@ install_splash <- function(tag="3.2") {
#' @param container_name naem for the container. Defaults to "`splashr`".
#' @param remove remove the Splash container instance after it's stopped?
#'        Defaults to `FALSE`.
#' @param ... passed on to Splash instance launch parameters
#' @family splash_docker_helpers
#' @return `stevedor` container object
#' @return `stevedore` container object
#' @export
#' @examples \dontrun{
#' install_splash()
#' splash_container <- start_splash()
#' stop_splash(splash_container)
#' }
start_splash <- function(tag="3.2", container_name = "splashr", remove=FALSE) {
start_splash <- function(tag="latest", container_name = "splashr", remove=FALSE, ...) {

  docker <- stevedore::docker_client()

  docker$container$run(
    image = sprintf("scrapinghub/splash:%s", tag),
    name = container_name,
    ports = c("5023:5023", "8051:8051"),
    detach = TRUE,
    rm = remove,
    tty = TRUE
  tryCatch(
    docker$container$run(
      image = sprintf("scrapinghub/splash:%s", tag),
      name = container_name,
      ports = c("5023:5023", "8051:8051", "8050:8050"),
      detach = TRUE,
      rm = remove,
      tty = TRUE,
      "--disable-browser-caches",
      ...
    ),
    error = function(e) {
      message("Error pulling image from DockerHub.")
      return(NULL)
    },
    interrupt = function(e) {
      stop("Terminated by user", call. = FALSE)
    }
  ) -> splash_inst

  invisible(splash_inst)


@@ 66,8 97,10 @@ start_splash <- function(tag="3.2", container_name = "splashr", remove=FALSE) {
#' stop_splash(splash_container)
#' }
stop_splash <- function(splash_container) {
  splash_container$stop()
  splash_container$remove()
  if (inherits(splash_container, "stevedore_object")) {
    splash_container$stop()
    splash_container$remove()
  }
  invisible(NULL)
}



@@ 83,7 116,9 @@ stop_splash <- function(splash_container) {
killall_splash <- function() {

  docker <- stevedore::docker_client()

  x <- docker$container$list(all=TRUE)

  for (i in 1:nrow(x)) {
    if (grepl("bin/splash", x$command[i])) {
      message(sprintf("Pruning: %s...", x$id[i]))


@@ 94,6 129,7 @@ killall_splash <- function() {
      }
    }
  }

}



M R/splashr.r => R/splashr.r +27 -1
@@ 2,6 2,10 @@ splash_url <- function(splash_obj) { sprintf("http://%s:%s", splash_obj$host, sp

#' Configure parameters for connecting to a Splash server
#'
#'
#' @md
#' @note There is a quick "helper" object named `splash_local` which is preconfigured
#'       with `localhost` as the host name.
#' @param host host or IP address
#' @param port port the server is running on (default is 8050)
#' @param user,pass leave `NULL` if basic auth is not configured. Otherwise,


@@ 11,7 15,29 @@ splash_url <- function(splash_obj) { sprintf("http://%s:%s", splash_obj$host, sp
#' sp <- splash()
#' }
splash <- function(host, port=8050L, user=NULL, pass=NULL) {
  list(host=host, port=port, user=user, pass=pass)
  obj <- list(host=host, port=port, user=user, pass=pass)
  class(obj) <- c("splashr", "list")
  obj
}

#' Print for splashr
#'
#' @md
#' @param x a splashr object
#' @param ... unused
#' @keywords internal
#' @return x
#' @export
print.splashr <- function(x, ...) {

  cat(
    "<splashr instance connection; ",
    if (length(x$user)) sprintf("%s@", x$user) else "",
    x$host, ":", x$port, ">\n", sep=""
  )

  invisible(x)

}

#' @rdname splash

M R/user-agents.R => R/user-agents.R +20 -0
@@ 46,3 46,23 @@ ua_linux_firefox <- "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:51.0) Gecko/2010
#' @rdname splash_user_agent
#' @export
ua_ios_safari <- "Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1"

#' @rdname splash_user_agent
#' @export
ua_android_samsung <- "Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Mobile Safari/537.36"

#' @rdname splash_user_agent
#' @export
ua_kindle <- "Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+"

#' @rdname splash_user_agent
#' @export
ua_ps4 <- "Mozilla/5.0 (PlayStation 4 3.11) AppleWebKit/537.73 (KHTML, like Gecko)"

#' @rdname splash_user_agent
#' @export
ua_apple_tv <- "AppleTV6,2/11.1"

#' @rdname splash_user_agent
#' @export
ua_chromecast <- "Mozilla/5.0 (CrKey armv7l 1.5.16041) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.0 Safari/537.36"

A R/utils-safely.R => R/utils-safely.R +90 -0
@@ 0,0 1,90 @@
# Less cool counterparts to purrr's side-effect capture-rs
#
# Most of the helper functions are 100% from output.R in purrr repo
#
# @param quiet Hide errors (`TRUE`, the default), or display them
#   as they occur?
# @param otherwise Default value to use when an error occurs.
#
# @return `safely`: wrapped function instead returns a list with
#   components `result` and `error`. One value is always `NULL`.
#
#   `quietly`: wrapped function instead returns a list with components
#   `result`, `output`, `messages` and `warnings`.
#
#   `possibly`: wrapped function uses a default value (`otherwise`)
#   whenever an error occurs.
safely <- function(.f, otherwise = NULL, quiet = TRUE) {
  function(...) capture_error(.f(...), otherwise, quiet)
}

quietly <- function(.f) {
  function(...) capture_output(.f(...))
}

possibly <- function(.f, otherwise, quiet = TRUE) {
  force(otherwise)
  function(...) {
    tryCatch(.f(...),
      error = function(e) {
        if (!quiet)
          message("Error: ", e$message)
        otherwise
      },
      interrupt = function(e) {
        stop("Terminated by user", call. = FALSE)
      }
    )
  }
}

capture_error <- function(code, otherwise = NULL, quiet = TRUE) {
  tryCatch(
    list(result = code, error = NULL),
    error = function(e) {
      if (!quiet)
        message("Error: ", e$message)

      list(result = otherwise, error = e)
    },
    interrupt = function(e) {
      stop("Terminated by user", call. = FALSE)
    }
  )
}

capture_output <- function(code) {
  warnings <- character()
  wHandler <- function(w) {
    warnings <<- c(warnings, w$message)
    invokeRestart("muffleWarning")
  }

  messages <- character()
  mHandler <- function(m) {
    messages <<- c(messages, m$message)
    invokeRestart("muffleMessage")
  }

  temp <- file()
  sink(temp)
  on.exit({
    sink()
    close(temp)
  })

  result <- withCallingHandlers(
    code,
    warning = wHandler,
    message = mHandler
  )

  output <- paste0(readLines(temp, warn = FALSE), collapse = "\n")

  list(
    result = result,
    output = output,
    warnings = warnings,
    messages = messages
  )
}

M man/as_har.Rd => man/as_har.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/render-har.R
% Please edit documentation in R/render-har.r
\name{as_har}
\alias{as_har}
\title{Turn a generic Splash HAR response into a HAR object}

M man/as_httr_req.Rd => man/as_httr_req.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/as_req.R
% Please edit documentation in R/as_req.r
\name{as_httr_req}
\alias{as_httr_req}
\title{Create an httr verb request function from an HAR request}

M man/as_response.Rd => man/as_response.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/as_request.R
% Please edit documentation in R/as_request.r
\name{as_response}
\alias{as_response}
\title{Return a HAR entry response as an httr::response object}

M man/execute_lua.Rd => man/execute_lua.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/execute.R
% Please edit documentation in R/execute.r
\name{execute_lua}
\alias{execute_lua}
\title{Execute a custom rendering script and return a result.}

M man/get_content_size.Rd => man/get_content_size.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/content.R
% Please edit documentation in R/content.r
\name{get_content_size}
\alias{get_content_size}
\alias{get_body_size}

M man/get_content_type.Rd => man/get_content_type.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
% Please edit documentation in R/helpers.r
\name{get_content_type}
\alias{get_content_type}
\alias{is_content_type}

M man/get_har_entry.Rd => man/get_har_entry.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
% Please edit documentation in R/helpers.r
\name{get_har_entry}
\alias{get_har_entry}
\title{Retrieve an entry by index from a HAR object}

M man/get_request_type.Rd => man/get_request_type.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
% Please edit documentation in R/helpers.r
\name{get_request_type}
\alias{get_request_type}
\alias{is_get}

M man/get_request_url.Rd => man/get_request_url.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
% Please edit documentation in R/helpers.r
\name{get_request_url}
\alias{get_request_url}
\title{Retrieve request URL}

M man/get_response_body.Rd => man/get_response_body.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
% Please edit documentation in R/helpers.r
\name{get_response_body}
\alias{get_response_body}
\title{Retrieve the body content of a HAR entry}

M man/har_entries.Rd => man/har_entries.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
% Please edit documentation in R/helpers.r
\name{har_entries}
\alias{har_entries}
\title{Retrieve just the HAR entries from a splashr request}

M man/har_entry_count.Rd => man/har_entry_count.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
% Please edit documentation in R/helpers.r
\name{har_entry_count}
\alias{har_entry_count}
\title{Retrieves number of HAR entries in a response}

M man/install_splash.Rd => man/install_splash.Rd +5 -2
@@ 1,14 1,17 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/docker-splash.R
% Please edit documentation in R/docker-splash.r
\name{install_splash}
\alias{install_splash}
\title{Retrieve the Docker image for Splash}
\usage{
install_splash(tag = "3.2")
install_splash(tag = "latest")
}
\arguments{
\item{tag}{Splash Docker image tag to install}
}
\value{
a \code{docker_image} object or \code{NULL} if an error occurred.
}
\description{
Retrieve the Docker image for Splash
}

M man/json_fromb64.Rd => man/json_fromb64.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/utils.R
% Please edit documentation in R/utils.r
\name{json_fromb64}
\alias{json_fromb64}
\title{Convert a Base64 encoded string into an R object}

M man/killall_splash.Rd => man/killall_splash.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/docker-splash.R
% Please edit documentation in R/docker-splash.r
\name{killall_splash}
\alias{killall_splash}
\title{Prune all dead and running Splash Docker containers}

A man/print.splashr.Rd => man/print.splashr.Rd +20 -0
@@ 0,0 1,20 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/splashr.r
\name{print.splashr}
\alias{print.splashr}
\title{Print for splashr}
\usage{
\method{print}{splashr}(x, ...)
}
\arguments{
\item{x}{a splashr object}

\item{...}{unused}
}
\value{
x
}
\description{
Print for splashr
}
\keyword{internal}

M man/render_har.Rd => man/render_har.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/render-har.R
% Please edit documentation in R/render-har.r
\name{render_har}
\alias{render_har}
\title{Return information about Splash interaction with a website in HAR format.}

M man/render_html.Rd => man/render_html.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/render-html.R
% Please edit documentation in R/render-html.r
\name{render_html}
\alias{render_html}
\title{Return the HTML of the javascript-rendered page.}

M man/render_jpeg.Rd => man/render_jpeg.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/render-jpg.R
% Please edit documentation in R/render-jpg.r
\name{render_jpeg}
\alias{render_jpeg}
\title{Return a image (in JPEG format) of the javascript-rendered page.}

M man/render_json.Rd => man/render_json.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/render-json.R
% Please edit documentation in R/render-json.r
\name{render_json}
\alias{render_json}
\title{Return a json-encoded dictionary with information about javascript-rendered webpage.}

M man/render_png.Rd => man/render_png.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/render-png.R
% Please edit documentation in R/render-png.r
\name{render_png}
\alias{render_png}
\title{Return an image (in PNG format) of the javascript-rendered page.}

M man/splash.Rd => man/splash.Rd +7 -3
@@ 1,11 1,11 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/splashr.R
% Please edit documentation in R/splashr.r
\docType{data}
\name{splash}
\alias{splash}
\alias{splash_local}
\title{Configure parameters for connecting to a Splash server}
\format{An object of class \code{list} of length 4.}
\format{An object of class \code{splashr} (inherits from \code{list}) of length 4.}
\usage{
splash(host, port = 8050L, user = NULL, pass = NULL)



@@ 16,12 16,16 @@ splash_local

\item{port}{port the server is running on (default is 8050)}

\item{user, pass}{leave `NULL` if basic auth is not configured. Otherwise,
\item{user, pass}{leave \code{NULL} if basic auth is not configured. Otherwise,
fill in what you need for basic authentication.}
}
\description{
Configure parameters for connecting to a Splash server
}
\note{
There is a quick "helper" object named \code{splash_local} which is preconfigured
with \code{localhost} as the host name.
}
\examples{
\dontrun{
sp <- splash()

M man/splash_active.Rd => man/splash_active.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/splashr.R
% Please edit documentation in R/splashr.r
\name{splash_active}
\alias{splash_active}
\title{Test if a Splash server is up}

M man/splash_add_lua.Rd => man/splash_add_lua.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_add_lua}
\alias{splash_add_lua}
\title{Add raw lua code into DSL call chain}

M man/splash_click.Rd => man/splash_click.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_click}
\alias{splash_click}
\title{Trigger mouse click event in web page.}

M man/splash_debug.Rd => man/splash_debug.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/splashr.R
% Please edit documentation in R/splashr.r
\name{splash_debug}
\alias{splash_debug}
\alias{print.splash_debug}

M man/splash_enable_javascript.Rd => man/splash_enable_javascript.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_enable_javascript}
\alias{splash_enable_javascript}
\title{Enable or disable execution of JavaSript code embedded in the page.}

M man/splash_focus.Rd => man/splash_focus.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_focus}
\alias{splash_focus}
\title{Focus on a document element provided by a CSS selector}

M man/splash_go.Rd => man/splash_go.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_go}
\alias{splash_go}
\title{Go to an URL.}

M man/splash_har.Rd => man/splash_har.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_har}
\alias{splash_har}
\title{Return information about Splash interaction with a website in HAR format.}

M man/splash_har_reset.Rd => man/splash_har_reset.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_har_reset}
\alias{splash_har_reset}
\title{Drops all internally stored HAR records.}

M man/splash_history.Rd => man/splash_history.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/splashr.R
% Please edit documentation in R/splashr.r
\name{splash_history}
\alias{splash_history}
\title{Get information about requests/responses for the pages loaded}

M man/splash_html.Rd => man/splash_html.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_html}
\alias{splash_html}
\title{Return a HTML snapshot of a current page.}

M man/splash_images.Rd => man/splash_images.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_images}
\alias{splash_images}
\title{Enable/disable images}

M man/splash_perf_stats.Rd => man/splash_perf_stats.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/splashr.R
% Please edit documentation in R/splashr.r
\name{splash_perf_stats}
\alias{splash_perf_stats}
\title{Get Splash performance-related statistics}

M man/splash_plugins.Rd => man/splash_plugins.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_plugins}
\alias{splash_plugins}
\title{Enable or disable browser plugins (e.g. Flash).}

M man/splash_png.Rd => man/splash_png.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_png}
\alias{splash_png}
\title{Return a screenshot of a current page in PNG format.}

M man/splash_press.Rd => man/splash_press.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_press}
\alias{splash_press}
\title{Trigger mouse press event in web page.}

M man/splash_private_mode.Rd => man/splash_private_mode.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_private_mode}
\alias{splash_private_mode}
\title{Enable or disable execution of JavaSript code embedded in the page.}

M man/splash_release.Rd => man/splash_release.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_release}
\alias{splash_release}
\title{Trigger mouse release event in web page.}

M man/splash_response_body.Rd => man/splash_response_body.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_response_body}
\alias{splash_response_body}
\title{Enable or disable response content tracking.}

M man/splash_send_keys.Rd => man/splash_send_keys.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_send_keys}
\alias{splash_send_keys}
\title{Send keyboard events to page context.}

M man/splash_send_text.Rd => man/splash_send_text.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_send_text}
\alias{splash_send_text}
\title{Send text as input to page context, literally, character by character.}

M man/splash_user_agent.Rd => man/splash_user_agent.Rd +16 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R, R/user-agents.R
% Please edit documentation in R/dsl.r, R/user-agents.R
\docType{data}
\name{splash_user_agent}
\alias{splash_user_agent}


@@ 15,6 15,11 @@
\alias{ua_linux_chrome}
\alias{ua_linux_firefox}
\alias{ua_ios_safari}
\alias{ua_android_samsung}
\alias{ua_kindle}
\alias{ua_ps4}
\alias{ua_apple_tv}
\alias{ua_chromecast}
\title{Overwrite the User-Agent header for all further requests.}
\format{An object of class \code{character} of length 1.}
\usage{


@@ 43,6 48,16 @@ ua_linux_chrome
ua_linux_firefox

ua_ios_safari

ua_android_samsung

ua_kindle

ua_ps4

ua_apple_tv

ua_chromecast
}
\arguments{
\item{splash_obj}{splashr object}

M man/splash_version.Rd => man/splash_version.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/splashr.R
% Please edit documentation in R/splashr.r
\name{splash_version}
\alias{splash_version}
\title{Get Splash version information}

M man/splash_wait.Rd => man/splash_wait.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/dsl.R
% Please edit documentation in R/dsl.r
\name{splash_wait}
\alias{splash_wait}
\title{Wait for a period time}

M man/start_splash.Rd => man/start_splash.Rd +11 -3
@@ 1,10 1,11 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/docker-splash.R
% Please edit documentation in R/docker-splash.r
\name{start_splash}
\alias{start_splash}
\title{Start a Splash server Docker container}
\usage{
start_splash(tag = "3.2", container_name = "splashr", remove = FALSE)
start_splash(tag = "latest", container_name = "splashr",
  remove = FALSE, ...)
}
\arguments{
\item{tag}{Splash Docker image tag to start}


@@ 13,14 14,21 @@ start_splash(tag = "3.2", container_name = "splashr", remove = FALSE)

\item{remove}{remove the Splash container instance after it's stopped?
Defaults to `FALSE`.}

\item{...}{passed on to Splash instance launch parameters}
}
\value{
`stevedor` container object
`stevedore` container object
}
\description{
If using this in an automation context, you should consider adding a
`Sys.sleep(3)` (or higher) after starting the docker container.
}
\details{
This uses the `latest` image and passed the `--disable-browser-caches`
parameter. If you do not want to use the 3.2.x+ versions of `Splash`
you should use your own startup scripts vs this helper function.
}
\note{
you need Docker running on your system and have pulled the container with
      [install_splash] for this to work. You should save the resultant

M man/stop_splash.Rd => man/stop_splash.Rd +1 -1
@@ 1,5 1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/docker-splash.R
% Please edit documentation in R/docker-splash.r
\name{stop_splash}
\alias{stop_splash}
\title{Stop a running a Splash server Docker container}

M tests/testthat/test-splash.R => tests/testthat/test-splash.R +2 -2
@@ 6,7 6,7 @@ test_that("we can do something", {
  test_url <- "http://localhost:8050/"

  xpct <- function(x) {
    spact <- splash_active()
    spact <- splash_active(splash_local)
    expect_that(spact, equals(TRUE))
    expect_that(length(splash_debug()), equals(7))
    expect_that(length(splash_version()), equals(9))


@@ 17,7 17,7 @@ test_that("we can do something", {
    expect_that(render_har(url = test_url), is_a("har"))
  }

  spact <- splash_active()
  spact <- splash_active(splash_local)

  if (spact) {
    xpct()