Giter Club home page Giter Club logo

rselenium's Introduction

RSelenium

R-CMD-check codecov CRAN status CRAN monthly CRAN total

This is a set of R Bindings for Selenium 2.0 Remote WebDriver, which you can download from http://selenium-release.storage.googleapis.com/index.html. This binding will not work with the 1.0 version of Selenium.

Install

To install RSelenium from CRAN, run:

install.packages("RSelenium")

To install the development version from GitHub, run:

# install.packages("remotes")
remotes::install_github("ropensci/RSelenium")

To get started using RSelenium you can look at the introduction vignette located in /doc/basics.html once RSelenium is installed or run

vignette("basics", package = "RSelenium")

or the basic vignette can be viewed here.

There is a second vignette dealing with running RSelenium on different browsers/OS locally and remotely which can be viewed at Driving OS/Browsers Local and Remote.

Summary of Vignettes

  1. Basics
  2. Driving OS/Browsers Local and Remote
  3. Testing Shiny Apps
    • Consider using RStudio's shinytest package for testing Shiny apps.
  4. Headless Browsing
    • PhantomJS development is suspended until further notice.
    • Consider using RStudio's webdriver package.
  5. Docker
  6. Internet Explorer
    • Internet Explorer 11 has retired as of June 15, 2022.

Sauce Labs

user <- "rselenium0"
pass <- "*******************************"
port <- 80
ip <- paste0(user, ':', pass, "@ondemand.saucelabs.com")
browser <- "firefox"
version <- "25"
platform <- "OS X 10.9"
extraCapabilities <- list(
  name = "Test RSelenium",
  username = user,
  accessKey = pass
)

remDr <- remoteDriver$new(
  remoteServerAddr = ip,
  port = port,
  browserName = browser,
  version = version,
  platform = platform,
  extraCapabilities = extraCapabilities
)

BrowserStack

user <- "johnharrison" 
pass <- "*******************"
port <- 80
ip <- paste0(user, ':', pass, "@hub.browserstack.com")
extraCapabilities <- list(
  "browser" = "IE",
  "browser_version" = "7.0",
  "os" = "Windows",
  "os_version" = "XP",
  "browserstack.debug" = "true"
)

remDr <- remoteDriver$new(
  remoteServerAddr = ip,
  port = port,
  extraCapabilities = extraCapabilities
)

Related Work

  • chromote: An R implementation of the Chrome DevTools Protocol. It works with Chrome, Chromium, Opera, Vivaldi, and other browsers based on Chromium.
  • shinytest: For automated testing of Shiny applications, using a headless browser, driven through webdriver.
  • webdriver: 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'.
  • seleniumPipes: A lightweight implementation of the w3c webdriver specification. It has been built utilising xml2, httr and magrittr so provides an alternative for users who are familiar with piping.
  • rwebdriver: R bindings to the Webdriver API
  • rdom: Render and parse the DOM from R via phantomjs.

License

The RSelenium package is licensed under the AGPLv3. The help files are licensed under the creative commons attribution, non-commercial, share-alike license CC-NC-SA.

As a summary, the AGPLv3 license requires, attribution, include copyright and license in copies of the software, state changes if you modify the code, and disclose all source code. Details are in the COPYING file.


rselenium's People

Contributors

cpsievert avatar daattali avatar ethanwhite avatar fsavje avatar jeroen avatar johndharrison avatar jonathanvoelkle avatar jstockwin avatar juyeongkim avatar mnel avatar zappingseb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rselenium's Issues

Latest update of OS X Yosemite (V 10.10.2)

Hi,
Late last month RSelenium stopped working for me. This coincides with an upgrade of OS X Yosemite I performed on the same day as it stopped working. The generic error message generated by R doesn't help in identifying the error and after a week of sweeping the internet forums for a solution, I still couldn't find it. The RScript can't get past the "remDr$open" command.

In case this is an issue for other Mac users, I'm looking forward to a solution.

Best
C.D.

Phantomjs 2.0 - Linux-x86_64

There is a permission denied error when I follow below reference.
https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-headless.html

I am using the Linux bin/Phantomjs-2.0
ariya/phantomjs#12948 (comment)

> require(RSelenium)
> RSelenium::checkForServer()
> RSelenium::startServer()
Error in file(file, ifelse(append, "a", "w")) : 
  cannot open the connection
In addition: Warning message:
In file(file, ifelse(append, "a", "w")) :
  cannot open file '/usr/lib64/R/library/RSelenium/bin/sellog.txt': Permission denied
> dir(paste0(getwd()))
 [1] "testing.Rmd"  
 [2] "testing.html" 
 [3] "testing.Rproj"
 [4] "custom.css"                                 
 [5] "datasets"                                   
 [6] "figure"                                     
 [7] "function"                                   
 [8] "LICENSE"                                    
 [9] "missfont.log"                               
[10] "phantomjs"                                  
[11] "phantomjs.exe"                              
[12] "PL.R"                                       
[13] "README.md"                                  
> pJS <- phantom()
Error in phantom() : PhantomJS binary not located.
> pJS <- phantom(paste0(getwd(),'/phantomjs'))
sh: /home/ryoeng/Scibrokes/Testing/phantomjs: Permission denied
> pJS <- phantom(paste0(getwd(),'/phantomjs.exe'))
sh: /home/usr/phantomjs.exe: Permission denied

Suppress Logs to R Console

Hello!

First off: Fantastic package.

Secondly: I would like to suppress all logs (or learn how to selectively block WARN logs) coming from the selenium server into the R console. They just seem to be a bit verbose.

Example console outputs that I would like to learn how to remove:
"20:48:18.988 INFO - Executing [...]"
"20:48:19.970 WARN - Exception thrown [...]"

I am guessing this can be done by passing the appropriate keys via the 'extraCapabilities' argument when setting up a remoteDriver() but I cannot figure out what those keys should be!

Any help would be greatly appreciated.

-Marc

checkForServer returns an error

> library(RSelenium)
Loading required package: RCurl
Loading required package: bitops
Loading required package: RJSONIO
Loading required package: XML
> checkForServer()
Permission denied> 

Problem with remoteDriver()

I am trying to use remoteDriver(browserName = "firefox") and am running into an error.

> library(RSelenium)
> checkForServer()
> startServer()
Warning message:
running command '"java" -jar "C:/Users/chessa015/Documents/R/win-library/3.1/RSelenium/bin/selenium-server-standalone.jar" -log "C:/Users/chessa015/Documents/R/win-library/3.1/RSelenium/bin/sellog.txt"' had status 127  
> Sys.sleep(15)
> remDr <- remoteDriver(browserName = "firefox")
> remDr$open()
[1] "Connecting to remote server"
Undefined error in RCurl call.
Error in queryRD(paste0(serverURL, "/session"), "POST", qdata = toJSON(serverOpts)) : 

I encountered this issue in tdhock/animint#66. Please let me know what else I can do to help.

> devtools::session_info()
Session info ---------------------------------------------------------------
 setting  value                       
 version  R version 3.1.3 (2015-03-09)
 system   x86_64, mingw32             
 ui       RStudio (0.98.1083)         
 language (EN)                        
 collate  English_United States.1252  
 tz       America/Denver              

Packages -------------------------------------------------------------------
 package    * version   date       source        
 bitops       1.0-6     2013-08-17 CRAN (R 3.1.1)
 caTools    * 1.17.1    2014-09-10 CRAN (R 3.1.1)
 devtools   * 1.7.0     2015-01-17 CRAN (R 3.1.2)
 RCurl        1.95-4.5  2014-12-06 CRAN (R 3.1.2)
 RJSONIO      1.3-0     2014-07-28 CRAN (R 3.1.1)
 RSelenium    1.3.5     2014-10-26 CRAN (R 3.1.3)
 rstudio    * 0.98.1083 2014-10-26 local         
 rstudioapi * 0.2       2014-12-31 CRAN (R 3.1.2)
 XML          3.98-1.1  2013-06-20 CRAN (R 3.1.1)

sendKeysToElement delay too short in test-output

In my setup, not all checkboxes were clicked in test-output.r. Below my attempt to change this, but maybe there is an easier way out by setting some global delay for sendKeysToElement?

Dieter

test_that("output object alignment correct", {
  remDr$navigate(appURL)
  webElems <- remDr$findElements("css selector", "#ctrlSelect input")
  expect_equal(length(webElems),4) # Otherwise some checkbox was missed
  lapply(webElems, function(x){
    if(!x$isElementSelected()[[1]]){
      if(browser != "internet explorer"){
        x$clickElement()
      }else{
        x$sendKeysToElement(list(key='space'))
        #Sys.sleep(50)
      }
    }
  })
  # Check if selected
  areChecked = sum(unlist(lapply(webElems, function(x){
    x$isElementSelected()[[1]]})))
  expect_equal(areChecked,4,info = "You may need to uncomment Sys.sleep(50) in test-output.r",
               label="Number of checked elements")      

RSelenium connect attempt produces Java error

I would appreciate help with RSelenium (v 2.4.4 downloaded Nov 29, 2014). My first example is copied directly from the thread
# Get Google Chromes Inspect Element into R

  library("RSelenium")
  checkForServer()
  startServer()
   remDr <- remoteDriver(remoteServerAddr = "localhost", 
              port = 4444, 
              browserName = "firefox"
              )
  remDr$open()

This results in

  > remDr$open()
  [1] "Connecting to remote server"
 Error:   Summary: UnknownError
      Detail: An unknown server-side error occurred while processing the   command.
     class: org.openqa.selenium.WebDriverException

I also drew on the thread

# Using Phantomjs with RSelenium on Windows 7
require(RSelenium)
# devtools::install_github("ropensci/RSelenium") # the latest dev version was    installed
 psPath <- "C:/Users/BG/Documents/R/win-library/3.1/phantomjs/phantomjs-1.9.8-windows/phantomjs.exe"  # local location of binary
 pJS <- phantom(pjs_cmd = psPath)
 remDr <- remoteDriver(browserName = "phantomjs")
 remDr$open()

This returns

 > remDr$open()
 [1] "Connecting to remote server"
 Error:   Summary: UnknownError
     Detail: An unknown server-side error occurred while processing the command.
       class: java.lang.NoClassDefFoundError

Further information on the setup:

 > sessionInfo()
  R version 3.1.2 (2014-10-31)
 Platform: x86_64-w64-mingw32/x64 (64-bit)
 locale:
 [1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
 [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
 [5] LC_TIME=English_United States.1252    
 attached base packages:
 1] stats     graphics  grDevices utils     datasets  methods   base     
  other attached packages:
 [1] RSelenium_1.3.5 XML_3.98-1.1    RJSONIO_1.3-0   RCurl_1.95-4.3  bitops_1.0-6    nlme_3.1-118   
 loaded via a namespace (and not attached):
 [1] caTools_1.17.1  grid_3.1.2      lattice_0.20-29 tools_3.1.2    

 > system("java -version")
 java version "1.8.0_25"
 Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
 Java HotSpot(TM) Client VM (build 25.25-b02, mixed mode, sharing)

Thanks in advance for any help or advice.

bassic access authentication

Is it possible to automate basic access authentication with RSelenium? If so it wold be nice to add an example to one of the vignettes.

Thanks.

Error encoding special char

trying to get page source from a page with special char, the output can't resolve the encoding. This is an example:

 library(RSelenium)

 RSelenium::checkForServer()
 RSelenium::startServer()
 remDr <- remoteDriver() 
 remDr$open() 
 remDr$navigate("http://www.degraeve.com/reference/specialcharacters.php")
 page <- remDr$getPageSource()
 page <- htmlParse(unlist(page))

an example of output is this

 ©1999-2010 DeGraeve.com - ... 

This is the output of sessioninfo()

 > sessionInfo()
 R version 3.1.0 (2014-04-10)
 Platform: x86_64-pc-linux-gnu (64-bit)

 locale:
  [1] LC_CTYPE=it_IT.UTF-8       LC_NUMERIC=C              
  [3] LC_TIME=it_IT.UTF-8        LC_COLLATE=it_IT.UTF-8    
  [5] LC_MONETARY=it_IT.UTF-8    LC_MESSAGES=it_IT.UTF-8   
  [7] LC_PAPER=it_IT.UTF-8       LC_NAME=C                 
  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
 [11] LC_MEASUREMENT=it_IT.UTF-8 LC_IDENTIFICATION=C       

 attached base packages:
 [1] stats     graphics  grDevices utils     datasets  methods   base     

 other attached packages:
 [1] RSelenium_1.2.2 XML_3.98-1.1    caTools_1.17    RJSONIO_1.2-0.2
 [5] RCurl_1.95-4.1  bitops_1.0-6   
 > 

Programmatically stopping selenium

It'd be nice to have a stopServer() function to programmatically stop selenium from running in the background. I'm guessing this doesn't exist already because there is no nice cross-platform solution? Borrowing ideas from RSelenium::phantom(), I have a solution for Mac OS X, but I have no idea how to attack this on Windows...

RSelenium::startServer()
# this function probably only works on Darwin
stopServer <- function() {
  x <- system("ps -Ao\"pid,args\"", intern = TRUE)
  cmds <- sub("^\\s*(\\d+)(.*)", "\\1,\\2", x)
  y <- read.csv(text = cmds[-1], stringsAsFactors = FALSE, header = F)
  pid <- y[grepl("selenium-server-standalone.jar", y[,2]), 1]
  tools::pskill(pid)
}
stopServer()

Bug in checkForServer function

I think there is a bug in the source code of the "checkForServer" function:

selXML <- xmlParse(paste0(selURL), "/?delimiter=")

should be:

selXML <- xmlParse(paste0(selURL, "/?delimiter="))

Thank you for the excelent job!

bug by install_github("RSelenium", "johndharrison")

Dear John,

i wanted to install RSelenium one more time, but unfortunately i always get an error.

It looks like this:
install.packages("devtools") # okay
devtools::install_github("RSelenium", "johndharrison") # but here:

Downloading github repo johndharrison/RSelenium@master
error in download(dest, src, auth) : client error: (404) Not Found

Username parameter is deprecated. Please use johndharrison/RSelenium

So I tried also:
devtools::install_github("johndharrison/RSelenium")

but i get:
Downloading github repo johndharrison/RSelenium@master
error in download(dest, src, auth) : client error: (404) Not Found

Could you help me on this?

With kind regards,
Pawel

Selenium 2.44 incompatible with Firefox 36.0.4

I see:

> library(RSelenium)
Loading required package: RCurl
Loading required package: bitops
Loading required package: RJSONIO
Loading required package: XML
> startServer()
> remDr <- remoteDriver(browserName = "firefox")
> remDr$open()
[1] "Connecting to remote server"
Error:   Summary: UnknownError
     Detail: An unknown server-side error occurred while processing the command.
     class: org.openqa.selenium.firefox.NotConnectedException
> remDr$getStatus()
$build
$build$version
[1] "2.44.0"

$build$revision
[1] "76d78cf"

$build$time
[1] "2014-10-23 20:02:37"


$os
$os$name
[1] "Mac OS X"

$os$arch
[1] "x86_64"

$os$version
[1] "10.10.2"


$java
$java$version
[1] "1.8.0_25"


> sessionInfo()
R version 3.1.3 (2015-03-09)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.2 (Yosemite)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RSelenium_1.3.5 XML_3.98-1.1    RJSONIO_1.3-0   RCurl_1.95-4.5 
[5] bitops_1.0-6    devtools_1.7.0 

loaded via a namespace (and not attached):
[1] caTools_1.17.1 tools_3.1.3   
> system("/Applications/Firefox.app/Contents/MacOS/firefox -v")
Mozilla Firefox 36.0.4

Problem with webSockets

Running the test app on one R session:

require(shiny)

packageVersion('shiny')
[1] ‘0.9.1’

runApp(file.path(find.package("RSelenium"), "apps", "shinytestapp"), port = 3000)

Running sauceConnect in a windows shell:
C:\Users\john\Documents\sc-4.1-win32\bin>sc.exe -u rselenium0 -k 49953c74-5c46-4
ff9-b584-cf31a4c71809 -v

require(RSelenium)
user <- "rselenium0" # Your Sauce Labs username
pass <- "49953c74-5c46-4ff9-b584-cf31a4c71809" # Your Sauce Labs access key 

port <- 80
ip <- paste0(user, ':', pass, "@ondemand.saucelabs.com")

port <- 4445
ip <- paste0(user, ':', pass, "@localhost")
rdBrowser <- "firefox"
version <- "26"
platform <- "Linux"
extraCapabilities <- list(name = "RSelenium OS/Browsers vignette second example", username = user
                          , accessKey = pass, tags = list("RSelenium-vignette", 
                                                          "OS/Browsers-vignette", "Example 2"))
remDr <- remoteDriver$new(remoteServerAddr = ip, port = port, browserName = rdBrowser
                          , version = version, platform = platform
                          , extraCapabilities = extraCapabilities)

Run a basic script:

localScript <- function(remDr){
  remDr$open()
  remDr$setImplicitWaitTimeout(2000) # wait for elements for 2 seconds
  remDr$navigate("http://localhost:3000")
  Sys.sleep(2)
  # highlight the labels
  webElems <- remDr$findElements("css selector", "#ctrlSelect span")
  lapply(webElems, function(x){x$highlightElement()})
  Sys.sleep(2)
  appIds <- c("summary", "distPlot", "ggPlot", "dttable")
  # Click each checkbox and check for its output
  lapply(seq_along(webElems), function(x){
    if(!webElems[[x]]$isElementSelected()[[1]]){
      webElems[[x]]$clickElement()
      # test for its output
      out <- remDr$findElement("id", appIds[x])
      out$highlightElement()
    }
  })

  remDr$close()
}

localScript(remDr)

Remote server connects locally but webSockets appear to be playing up.
Can be seen at project page https://saucelabs.com/u/rselenium0
search for name Browsers vignette second example video shows the shiny app greying out.

SAUCE CONNECT LOGS SHOW
20140414 202528.972 [06644] KGP warning: no keepalive ack for > 5s
20140414 202529.972 [06644] KGP warning: no keepalive ack for > 5s
20140414 202530.974 [06644] KGP warning: no keepalive ack for > 5s
20140414 202531.975 [06644] KGP warning: no keepalive ack for > 5s
20140414 202532.976 [06644] KGP warning: no keepalive ack for > 5s

which corresponds to this test https://saucelabs.com/tests/f74fbaa0d296404ab4dfe9e4a5baf36e

Move documentation to roxygen2 v4.0.1

roxygen2 has support for reference classes. Look to move the documentation @section Fields / @section Methods to @fields and methods with docstrings.

Unknown IO error2: failed to load external entity in checkForServer()

I am working in RStudio with following session infomation

> sessionInfo()
R version 3.2.0 (2015-04-16)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.3 (Yosemite)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.2.0

When running checkForServer(), I got the following error

> library("RSelenium")
Loading required package: RCurl
Loading required package: bitops
Loading required package: RJSONIO
Loading required package: XML
> checkForServer()
Unknown IO errorfailed to load external entity "http://selenium-release.storage.googleapis.com"
Error: 1: Unknown IO error2: failed to load external entity "http://selenium-release.storage.googleapis.com"

I google the error and find that it's probably caused by libxml2, on which the xmlTreeParse(), htmlTreeParse() and xmlEventParse() functions are built.

Browser does not open

I created a web-scraping routine that works very well on my computer. However, I installed Java and tried to run the same code on a co-worker's computer. Everything goes well until I try to open the browser, at which point no browser is actually opened:

install.packages("devtools")
install.packages("stringr")
install.packages("XML")
install.packages("RCurl")
install.packages("RSelenium")

require(devtools)
require(stringr)
require(RSelenium) 
require(XML)
require(RCurl)

RSelenium::checkForServer(update=TRUE)
RSelenium::startServer()
remDr=remoteDriver()
remDr$open() 

The console prints out the text below. Any ideas on why this is happening?

[1] "Connecting to remote server"
$message
[1] "GET /session/\nBuild info: version: '2.43.0', revision: '597b76b', time: '2014-09-09 20:52:14'\nSystem info: host: 'MR3334', ip: '10.5.0.80', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_67'\nDriver info: driver.version: unknown"

$localizedMessage
[1] "GET /session/\nBuild info: version: '2.43.0', revision: '597b76b', time: '2014-09-09 20:52:14'\nSystem info: host: 'MR3334', ip: '10.5.0.80', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_67'\nDriver info: driver.version: unknown"

$suppressed
list()

$cause
NULL

$systemInformation
[1] "System info: host: 'MR3334', ip: '10.5.0.80', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_67'"

$supportUrl
NULL

$class
[1] "org.openqa.selenium.UnsupportedCommandException"

$additionalInformation
[1] "\nDriver info: driver.version: unknown"

$hCode
[1] 227990681

$stackTrace
$stackTrace[[1]]
NULL

$stackTrace[[2]]
NULL

$stackTrace[[3]]
NULL

$stackTrace[[4]]
NULL

$stackTrace[[5]]
NULL

$stackTrace[[6]]
NULL

$stackTrace[[7]]
NULL

$stackTrace[[8]]
NULL

$stackTrace[[9]]
NULL

$stackTrace[[10]]
NULL

$stackTrace[[11]]
NULL

$stackTrace[[12]]
NULL

$stackTrace[[13]]
NULL

$stackTrace[[14]]
NULL

$stackTrace[[15]]
NULL

$stackTrace[[16]]
NULL

$stackTrace[[17]]
NULL

$stackTrace[[18]]
NULL

$stackTrace[[19]]
NULL

$id
[1] NA

Do we need selenium server?

This is a n00b question, but do we actually need the java server? The python package[1] says it is not needed unless using the old API or driving a remote browser. It would be nice to drop this dependency, especially because the selenium binary sometimes goes crazing hogging cpu and network on my system.

[1] https://pypi.python.org/pypi/selenium

General feedback plus issues while transitioning to PhantomJS

John,

thanks a lot for making this package available!

For reporting purposes I used Java/HTMLUnit to extract some Excel files from a Cloud platform whose API does not provide such basic services. Since the company changed their UI recently, I thought it would be a good chance to try out R/RSelenium since I use R for the subsequent data processing anyway.

During this process I ran into a couple of issues.

1. Downloading files

I started using the stand-alone Selenium Server binary and the default setting of remoteDriver. I nearly accomplished my task but could not figure out how to actually download the file once I reached the respective download section because of the Excel popup.

However, I found this answer from you on SO.

I this still the way to go or is a simpler solution available? In both cases I think the answer could be added to the official RSelenium documentation in a different form since downloading files is a major use case covered by this package.

2. Determine opening of new tabs

For reaching the download section, I have to log in, switch users (since only one person of my team has download rights) and navigate to the download section. This gist shows the complete steps using the Selenium Server binary/default remoteDriver.

Once I switch users (row 35) a new window opens. To continue navigating I also need to switch the window (row 36).

Every now and then a new tab opens when I switch users or (even worse) a new tab opens somewhere in an unrelated step thus breaking the code.

Since this is not really deterministic, is there an option which does prevent opening new tabs while browsing?

3. Transition to PhantomsJS

Since I would like to automate this task on a server later on, I switched to PhantomJS for headless browsing.

While doing so, I ran into two issues which I could not resolve and which are my major show stoppers (3a and 3b).

3a. Link not click-able even though present on the page

This gist shows the PhantomJS version of my code which works fine till line 37 where I try to click on a link in a menu which was just opened in the step before.

Even though the code works using in the non-headless browsing version AND more importantly remDrv$screenshot(display = TRUE) shows the opened screenshot even when in PhantomJS mode, I get the following error message:

# Error: Summary: NoSuchElement
# Detail: An element could not be located on the page using the given search parameters.
# class: SessionReqHand
3b. Endless loop after sapply call

I overcame the issue of 3b with a temporary workaround (which I can only use for tests) by adding the table of possible proxy users to my start page. So I could skip the clicking on the 'Log in as' link.

After that everything works fine till line 58 where I use a simple sapply call to extract strings from a list. Here I do not receive any error but the script seems to get stuck in an endless loop. The non-headless browsing version does not have any issue here.

3c. Recommended strategy for transitioning to PhantomJS

In general, is there a recommended way to switch to PhantomJS (driving it directly) once your code runs successfully using remoteDriver with a standard browser (besides my specific issues above)?

Or is it really just about modifying the beginning and the end of your code like this, for instance:

startServer()
remDrv <- remoteDriver()
remDrv$open() 

vs.

pJS <- phantom(extras = c('--ignore-ssl-errors=yes'))
# Give the binary a moment
Sys.sleep(5) 
remDrv <- remoteDriver(browserName = 'phantomjs')
remDrv$open()`
3d. Downloading files with PhantomJS

Well, I have not reached the point of downloading my desired files using PhantomJS but how do I handle the potential download Excel popup in such a case?

Let me know, if you prefer separate tickets for each issue. I just submitted them together to explain the context a bit better.

Cheers,
Alex

Problem stopping phantomjs

I receive some warnings, but I can start up phantomjs as the vignette suggests:

> library(RSelenium)
Loading required package: RCurl
Loading required package: bitops
Loading required package: RJSONIO
Loading required package: XML
> pJS <- RSelenium::phantom()
ps: %p: keyword not found
ps: %a: keyword not found
ps: no valid keywords; valid keywords:
Warning message:
running command 'ps -Ao"%p,%a"' had status 1 
 PhantomJS is launching GhostDriver...
[INFO  - 2014-09-05T02:14:39.931Z] GhostDriver - Main - running on port 4444

> Sys.sleep(5) # give the binary a moment
> remDr <- remoteDriver(browserName = 'phantomjs')
> remDr$open()
[1] "Connecting to remote server"
[INFO  - 2014-09-05T02:15:16.841Z] Session [7a40a240-34a2-11e4-9bdf-fbcf04e748b2] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34","webSecurityEnabled":true}
[INFO  - 2014-09-05T02:15:16.841Z] Session [7a40a240-34a2-11e4-9bdf-fbcf04e748b2] - page.customHeaders:  - {}
[INFO  - 2014-09-05T02:15:16.841Z] Session [7a40a240-34a2-11e4-9bdf-fbcf04e748b2] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"1.9.7","driverName":"ghostdriver","driverVersion":"1.1.0","platform":"mac-unknown-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}}
[INFO  - 2014-09-05T02:15:16.841Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: 7a40a240-34a2-11e4-9bdf-fbcf04e748b2
$browserName
[1] "phantomjs"

$version
[1] "1.9.7"

$driverName
[1] "ghostdriver"

$driverVersion
[1] "1.1.0"

$platform
[1] "mac-unknown-32bit"

$javascriptEnabled
[1] TRUE

$takesScreenshot
[1] TRUE

$handlesAlerts
[1] FALSE

$databaseEnabled
[1] FALSE

$locationContextEnabled
[1] FALSE

$applicationCacheEnabled
[1] FALSE

$browserConnectionEnabled
[1] FALSE

$cssSelectorsEnabled
[1] TRUE

$webStorageEnabled
[1] FALSE

$rotatable
[1] FALSE

$acceptSslCerts
[1] FALSE

$nativeEvents
[1] TRUE

$proxy
$proxy$proxyType
[1] "direct"


$id
[1] "7a40a240-34a2-11e4-9bdf-fbcf04e748b2"

However, the stop and getPID methods don't seem to work:

> pJS$getPID()
integer(0)
> pJS$stop()
> system('ps aux|grep "phantomjs"', intern = TRUE)
[1] "cpsievert       21379   0.0  0.0  2434388    408 s003  U+    9:15PM   0:00.00 grep phantomjs"                                                                  
[2] "cpsievert       21377   0.0  0.0  2433364    920 s003  S+    9:15PM   0:00.00 sh -c ps aux|grep \"phantomjs\""                                                 
[3] "cpsievert       21361   0.0  0.6   812716  50796 s003  S+    9:14PM   0:00.73 /usr/local/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs --webdriver=4444"
[4] "cpsievert       21359   0.0  0.2  3053976  13072 s003  S+    9:14PM   0:00.08 node /usr/local/bin/phantomjs --webdriver=4444"                                  
> sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RSelenium_1.3.2 XML_3.98-1.1    RJSONIO_1.3-0   RCurl_1.95-4.1 
[5] bitops_1.0-6    devtools_1.5   

loaded via a namespace (and not attached):
[1] caTools_1.17   digest_0.6.4   evaluate_0.5.5 httr_0.3.0.99  memoise_0.2.1 
[6] parallel_3.1.1 stringr_0.6.2  tools_3.1.1    whisker_0.3-2 

RSelenium executing script gives UnknownError

Hi,

I would appreciate some help with RSelenium.
I've been trying to scrape data from squawka.com, following this example found on stackoverflow:
http://stackoverflow.com/questions/22121006/how-to-scrape-this-squawka-page

This however does not produce the wanted results for me. When trying to execute the code:

library(RSelenium)
checkForServer(update = TRUE)
startServer()

remDr <- remoteDriver()
remDr$open()
remDr$setImplicitWaitTimeout(3000)
remDr$navigate("http://eredivisie.squawka.com/feyenoord-vs-ajax/02-03-2014/dutch-eredivisie/matches")

Everything works fine. Firefox is opened and directed towards the URL. However when I try to execute the line:

squawkData <- remDr$executeScript("return XMLSerializer().serializeToString(squawkaDp.xml);", list())

It produces the following error:

Error:   Summary: UnknownError
     Detail: An unknown server-side error occurred while processing the command.
     class: org.openqa.selenium.WebDriverException

If looked this error up, and noticed most people encounter this error when trying the remDr$open() command, which wasn't really applicable to this situation. If searched the internet to find out what was going wrong but with no success.

Thanks in advance for any help/advice.

PhantomJS not working properly

require(RSelenium)

Loading required package: RSelenium

Loading required package: RCurl

Loading required package: bitops

Loading required package: RJSONIO

Loading required package: XML

psPath <- "C:/Users/home/Desktop/phantomjs-1.9.8-windows/phantomjs.exe"
RSelenium::startServer()
remDr <- remoteDriver(browserName = "phantomjs", extraCapabilities = list(phantomjs.binary.path = psPath))
remDr$open()

[1] "Connecting to remote server"

Error: Summary: UnknownError

Detail: An unknown server-side error occurred while processing the command.

class: java.lang.ClassNotFoundException

Rselenium unable to send keys to element

library(RSelenium)
remDr <- remoteDriver(browserName = "firefox")
remDr$open()
url <-"https://erp.iitkgp.ernet.in/"
remDr$navigate(url)

htmlParse(remDr$getPageSource()[[1]])
webElems <- remDr$findElements("id","user_id")
webElems[[1]]$sendKeysToElement("abc")

whenever i execute last line, it shows these error:
Error: Summary: UnknownError
Detail: An unknown server-side error occurred while processing the command.
class: java.lang.ClassCastException

So, how can i send value to any element

Problem using phantomjs with selenium

Taking the example from the headless browsing vignette gives me an error:

require(RSelenium)
RSelenium::startServer()
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()


[1] "Connecting to remote server"
Error:   Summary: UnknownError
     Detail: An unknown server-side error occurred while processing the command.
     class: java.lang.ClassNotFoundException

Oddly enough, if I change "phantomjs" to "phantom", I can connect:

dr <- remoteDriver(browserName = "phantom")
dr$open()


[1] "Connecting to remote server"
$browserName
[1] "htmlunit"

$javascriptEnabled
[1] TRUE

$version
NULL

$webdriver.remote.sessionid
[1] "fbb1b432-a78b-4d73-9141-01a9499bb5c0"

$platform
[1] "MAC"

$cssSelectorsEnabled
[1] TRUE

$id
[1] "fbb1b432-a78b-4d73-9141-01a9499bb5c0"

However, if I navigate somewhere and try to take a screenshot, I get an error:

dr$navigate("https://www.google.com/")
dr$screenshot(display = TRUE)

Error:   Summary: UnknownError
     Detail: An unknown server-side error occurred while processing the command.
     class: java.lang.ClassCastException

FYI, phantomjs is in my path:

Sys.which("phantomjs")
                 phantomjs 
"/usr/local/bin/phantomjs" 

And here is my sessionInfo():

R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RSelenium_1.3.5 XML_3.98-1.1    RJSONIO_1.3-0   RCurl_1.95-4.5  bitops_1.0-6   
[6] devtools_1.7.0 

loaded via a namespace (and not attached):
[1] caTools_1.17.1 tools_3.1.2   

problem: $clickElement() without "click"

Dear John,

During the first test with RSelenium appeared one problem. Perhaps you could help me in finding the solution?

Description of the problem:

I went through all the steps, which are listed at http://rpubs.com/johndharrison/12843. There were no problems until to the step with “Sending mouse events to elements”.

What I did in RStudio was the following:

remDr$navigate("http://www.google.com/ncr")
webElem <- remDr$findElement(using = "xpath", "//*/input[@id = 'gbqfq']")
webElem$sendKeysToElement(list("R Cran", key = "enter"))

webElems <- remDr$findElements(using = 'css selector', "li.g h3.r")
resHeaders <- unlist(lapply(webElems, function(x){x$getElementText()}))
resHeaders

webElem <- webElems[[which(resHeaders == "The Comprehensive R Archive Network")]]
webElem$clickElement()

After “webElem$clickElement()” there was unfortunately no „click“. I tried different possibilities, but i couldn´t find the solution.

I work with

  • Mac OS 10.8.5,
  • Firefox 29.0.1,
  • RStudio 0.97.320,
  • R 3.1.0
  • Terminal 2.3 (309)

I would be very pleased to receive your answer.

Kind regards,

$mouseMoveToLocation without "move"

Dear John,

During the first test with RSelenium appeared one problem due to $mouseMoveToLocation. Perhaps you could help me in finding the solution?

Description of the problem:

I went through following the steps in RStudio:

remDr$navigate("http://www.r-project.org")
remDr$switchToFrame("banner")
webElem <- remDr$findElement("partial link text", "download R")
webElem$getElementText()
loc <- webElem$getElementLocation()
loc[c('x','y')] ####################### everything okay so far
remDr$mouseMoveToLocation(webElement = webElem) # error

details of the error:
Error: Summary: InvalidElementState

Detail: An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element).

class: org.openqa.selenium.InvalidElementStateException

I work with

Mac OS 10.8.5,
Firefox 29.0.1,
RStudio 0.97.320,
R 3.1.0

I would be very pleased to receive your answer.

Kind regards,

Pawel

RSelenium/phantomjs Use Case Help

Example Use case

I presently call an rscript that executes roughly every 10 minutes.

The use case is roughly:

  1. call phantom()/start GhostDriver
  2. navigate & login
  3. browse some pages
  4. inject/execute some js
  5. stop GhostDriver/cleanup
  6. quit

What I am looking for:

I would like to skip steps 1 and 2 and resume step 3 iff steps 1,2 have been previously executed.

What I propose to do:

Assume the requisite logic/state checking is implemented in the proposed scenario.

To skip steps 1 and 2, I save and load a .Rdata session each time the rscript is executed and omit step 5. The phantomjs/RSelenium/R session bindings are thus preserved across multiple calls of the rscript.

There has to be a better way.

Any suggestions?

selectInput test doesn't work for me

Hi, I'm trying to set up tests for my Shiny app with your package, but not all examples work for me. For instance now I can't use selectInput text. Even example you have doesn't work.

test_dir(paste0(find.package("RSelenium"), "/apps/shinytestapp/tests/"), reporter = "Tap", filter = "selectinput")
1..3
# Context controls 
not ok 1 selectInput dataSet correct 
     Summary: NoSuchElement
     Detail: An element could not be located on the page using the given search parameters.
     class: org.openqa.selenium.NoSuchElementException
  1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls)
  2: eval(code, new_test_environment)
  3: eval(expr, envir, enclos)
  4: remDr$findElement("css selector", "#ctrlSelect1") at test-selectinput.r:20
  5: queryRD(paste0(serverURL, "/session/", sessionInfo$id, "/element"), "POST", qdata = toJSON(list(using = using, value = value)), json = TRUE)
  6: checkStatus()
  7: stop(errMessage, call. = FALSE) 
not ok 2 selectInput label correct 
     Summary: NoSuchElement
     Detail: An element could not be located on the page using the given search parameters.
     class: org.openqa.selenium.NoSuchElementException
  1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls)
  2: eval(code, new_test_environment)
  3: eval(expr, envir, enclos)
  4: remDr$findElement("css selector", "#reqcontrols label[for = 'dataset']") at test-selectinput.r:39
  5: queryRD(paste0(serverURL, "/session/", sessionInfo$id, "/element"), "POST", qdata = toJSON(list(using = using, value = value)), json = TRUE)
  6: checkStatus()
  7: stop(errMessage, call. = FALSE) 
not ok 3 selectInput selection invokes change 
     Summary: NoSuchElement
     Detail: An element could not be located on the page using the given search parameters.
     class: org.openqa.selenium.NoSuchElementException
  1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls)
  2: eval(code, new_test_environment)
  3: eval(expr, envir, enclos)
  4: remDr$findElement("css selector", "#reqcontrols #dataset") at test-selectinput.r:45
  5: queryRD(paste0(serverURL, "/session/", sessionInfo$id, "/element"), "POST", qdata = toJSON(list(using = using, value = value)), json = TRUE)
  6: checkStatus()
  7: stop(errMessage, call. = FALSE) 
Session info ----------------------------------------------------------------------------------
 setting  value                       
 version  R version 3.1.3 (2015-03-09)
 system   x86_64, linux-gnu           
 ui       RStudio (0.99.435)          
 language en_GB:en                    
 collate  en_GB.UTF-8                 
 tz       <NA>                        

Packages -------------------------------------------------------------------------------------
 package     * version  date       source                             
 akima       * 0.5-11   2013-09-16 CRAN (R 3.1.2)                     
 assertthat    0.1      2013-12-06 CRAN (R 3.1.2)                     
 bitops      * 1.0-6    2013-08-17 CRAN (R 3.1.2)                     
 caTools       1.17.1   2014-09-10 CRAN (R 3.1.2)                     
 DBI         * 0.3.1    2014-09-24 CRAN (R 3.1.2)                     
 devtools    * 1.8.0    2015-05-09 CRAN (R 3.1.3)                     
 digest        0.6.8    2014-12-31 CRAN (R 3.1.2)                     
 dplyr         0.4.1    2015-01-14 CRAN (R 3.1.2)                     
 evaluate      0.5.5    2014-04-29 CRAN (R 3.1.2)                     
 formatR       1.0      2014-08-25 CRAN (R 3.1.2)                     
 git2r         0.10.1   2015-05-07 CRAN (R 3.1.3)                     
 httr          0.6.1    2015-01-01 CRAN (R 3.1.2)                     
 knitr         1.9      2015-01-20 CRAN (R 3.1.2)                     
 logging     * 0.7-103  2013-04-12 CRAN (R 3.1.2)                     
 lubridate   * 1.3.3    2013-12-31 CRAN (R 3.1.2)                     
 magrittr      1.5      2014-11-22 CRAN (R 3.1.2)                     
 memoise       0.2.1    2014-04-22 CRAN (R 3.1.2)                     
 plyr          1.8.2    2015-04-21 CRAN (R 3.1.3)                     
 Rcpp          0.11.6   2015-05-01 CRAN (R 3.1.3)                     
 RCurl       * 1.95-4.6 2015-04-24 CRAN (R 3.1.3)                     
 RJSONIO     * 1.3-0    2014-07-28 CRAN (R 3.1.2)                     
 RPostgreSQL * 0.4      2013-03-27 CRAN (R 3.1.2)                     
 RSelenium   * 1.3.6    2015-05-14 Github (ropensci/RSelenium@9238704)
 rstudioapi    0.2      2014-12-31 CRAN (R 3.1.2)                     
 rversions     1.0.0    2015-04-22 CRAN (R 3.1.3)                     
 stringi       0.4-1    2014-12-14 CRAN (R 3.1.2)                     
 stringr       1.0.0    2015-04-30 CRAN (R 3.1.3)                     
 testthat    * 0.9.1    2014-10-01 CRAN (R 3.1.3)                     
 XML         * 3.98-1.1 2013-06-20 CRAN (R 3.1.3) 

Is there any obvious reason for this?

Getting an error when trying to open a remote server

I run the following code:

library(RSelenium)
appURL <- ("www.google.com")
RSelenium::checkForServer()
RSelenium::startServer()
remDr <- RSelenium::remoteDriver()
remDr$open()

And I get this error:

[1] "Connecting to remote server"
Error:   Summary: UnknownError
         Detail: An unknown server-side error occurred while processing the command.
         class: org.openqa.selenium.firefox.NotConnectedException

I am running R 3.1.3, RSelenium 1.3.6, and Firefox 37.0.2

shiny test errors

Hi @johndharrison,

Thanks for this wonderful package! I'm hoping to use this and testthat to create tests for the animint package. Specifically, my goal is to serve local files, access the DOM via RSelenium, and verify certain elements have certain properties (hopefully all within one R session). Your vignette on testing shiny apps is clearly related to my goal, but it isn't clear to me how the test knows how to serve the shiny app. For example, how do you go about serving the shiny app at http://127.0.0.1:6012? Do you have to do this in a separate R session? Related to my question, when I run

library(testthat)
library(devtools)
install_github("johndharrison/RSelenium")
library(RSelenium)
test_dir(paste0(find.package("RSelenium"), "/apps/shinytestapp/tests/"), filter = 'basic', reporter = "Tap")

I get:

1..3
# Context basic 
not ok 1 can connect to app 
  appTitle not equal to "Shiny Test App"
  1 string mismatches:
  x[1]: "Shiny Test App"
  y[1]: "Problem loading page"


not ok 2 controls are present 
  subscript out of bounds
  1: expect_equal(appCtrlLabels[[1]], "Select controls required:") at test-basic.r:24
  2: expect_that(object, equals(expected, label = expected.label, ...), info = info, label = label)
  3: condition(object)
  4: compare(expected, actual, ...)
  5: compare.character(expected, actual, ...)
  6: identical(x, y) 
not ok 3 tabs are present 
  subscript out of bounds
  1: expect_equal(appTabLabels[[1]], "Plots") at test-basic.r:34
  2: expect_that(object, equals(expected, label = expected.label, ...), info = info, label = label)
  3: condition(object)
  4: compare(expected, actual, ...)
  5: compare.character(expected, actual, ...)
  6: identical(x, y) 

RSelenium doesn't work with chrome

RSelenium::startServer()
remDr <- remoteDriver(browserName = "chrome")
remDr$open()

[1] "Connecting to remote server"

Error: Summary: UnknownError

#Detail: An unknown server-side error occurred while processing the command.

class: java.lang.IllegalStateException

remDr$getStatus()
$build
$build$version
[1] "2.44.0"

$build$revision
[1] "76d78cf"

$build$time
[1] "2014-10-23 20:02:37"

$os
$os$name
[1] "Windows 7"

$os$arch
[1] "x86"

$os$version
[1] "6.1"

$java
$java$version
[1] "1.7.0_71"

Undefined error in RCurl call. Error in queryRD(paste0(serverURL, "/session"), "POST", qdata = toJSON(serverOpts)) :

> checkForServer(update = TRUE)
[1] "DOWNLOADING STANDALONE SELENIUM SERVER. THIS MAY TAKE SEVERAL MINUTES"
trying URL 'http://selenium-release.storage.googleapis.com/2.47/selenium-server-standalone-2.47.0.jar'
Content type 'application/java-archive' length 31781371 bytes (30.3 MB)
==================================================
downloaded 30.3 MB

> startServer()
> remDrv <- remoteDriver()
> remDrv$open()
[1] "Connecting to remote server"
Undefined error in RCurl call.
Error in queryRD(paste0(serverURL, "/session"), "POST", qdata = toJSON(serverOpts)) : 

> require(RSelenium)
> user <- "johnharrison" 
> pass <- "*******************"
> port <- 80
> ip <- paste0(user, ':', pass, "@hub.browserstack.com")
> extraCapabilities <- list("browser" = "IE",
+                           "browser_version" = "7.0",
+                           "os" = "Windows",
+                           "os_version" = "XP",
+                           "browserstack.debug" = "true")
> remDr <- remoteDriver$new(remoteServerAddr = ip, port = port
+                           , extraCapabilities = extraCapabilities)
> remDr$open()
[1] "Connecting to remote server"
Error:   Summary: UnknownError
     Detail: An unknown server-side error occurred while processing the command.

Loaded RCurl and RSelenium but unable open any browser, may I know any solution?
https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-headless.html

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.