ander2ed
ander2ed

Reputation: 1338

phantomjs unable to find element on page

Recently, I've been having trouble driving phantomjs under RSelenium. It seems that the browser is unable to locate anything on the page using findElement(). If I pass something as simple as:

library("RSelenium")
RSelenium::checkForServer()
RSelenium::startServer()
rd <- remoteDriver(browserName = "phantomjs")
rd$open()
Sys.sleep(5)

rd$navigate("https://www.Facebook.com")
searchBar <- rd$findElement(using = "id", "email")

I get the error below:

Error:   Summary: NoSuchElement
Detail: An element could not be located on the page using the given search parameters.
class: org.openqa.selenium.NoSuchElementException

Any thoughts on what is causing this? It doesn't seem to matter what page I navigate to; it simply fails anytime I try to locate an element on the webpage. This issue started recently and I noticed it when my cron jobs began failing.

I'm working in Ubuntu 14.04 LTS with R 3.3.1 and phantomjs 2.1.1. I don't suspect some type of compatibility issue as this has worked very recently and I haven't updated anything.

Upvotes: 0

Views: 640

Answers (1)

jdharrison
jdharrison

Reputation: 30435

The version of phantomjs you installed may be limited. See here

  • Disabled Ghostdriver due to pre-built source-less Selenium blobs.
  • Added README.Debian explaining differences from upstream "phantomjs".

If you installed recently using apt-get then this is most likely the case. You can download from the phantomjs website and place the bin location in your PATH.

Alternatively use npm to install a version for you

npm install phantomjs-prebuilt

This will then but a link to the bin in node_modules/.bin/phantomjs.

For the reasons behind the limitations in apt-get you can read the README.Debian file contained here.

Limitations

Unlike original "phantomjs" binary that is statically linked with modified QT+WebKit, Debian package is built with system libqt5webkit5. Unfortunately the latter do not have webSecurity extensions therefore "--web-security=no" is expected to fail.

https://github.com/ariya/phantomjs/issues/13727#issuecomment-155609276


Ghostdriver is crippled due to removed source-less pre-built blobs:

src/ghostdriver/third_party/webdriver-atoms/*

Therefore all PDF functionality is broken.


PhantomJS cannot run in headless mode (if there is no X server available).

Unfortunately it can not be fixed in Debian. To achieve headless-ness upstream statically link with customised QT + Webkit. We don't want to ship forks of those projects. It would be great to eventually convince upstream to use standard libraries. Meanwhile one can use "xvfb-run" from "xvfb" package:

xvfb-run --server-args="-screen 0 640x480x16" phantomjs

If you don't want to set your path for phantomjs then you can add it as a extra:

library(RSelenium)

selServ <- startServer()
pBin <- list(phantomjs.binary.path = "/home/john/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs")
rd <- remoteDriver(browserName = "phantomjs"
                   , extraCapabilities = pBin)
Sys.sleep(5)
rd$open()

rd$navigate("https://www.Facebook.com")
searchBar <- rd$findElement(using = "id", "email")

rd$close()
selServ$stop()

Upvotes: 2

Related Questions