/docker-phantomjs

PhantomJS 2 non-root container

Primary LanguageDockerfileMIT LicenseMIT

Supported tags and respective Dockerfile links

What is PhantomJS

PhantomJS is a headless WebKit browser, often used via WebDriver for web system testing. It's based on WebKit, runs JavaScript, and allows to take screenshots.

Features of this image

This Dockerized version of PhantomJS is:

  • Small: Using Debian image (below 100 MB, while Ubuntu is about 230 MB), and removing packages used during build.
  • Simple: Exposes default port, easy to extend.
  • Secure: Runs as non-root UID/GID 52379 (selected randomly to avoid mapping to an existing user) and uses dumb-init to reap zombie processes.

Usage

JavaScript interactive shell

Start PhantomJS in REPL:

$ docker run -it --rm wernight/phantomjs
>

Remote WebDriver

Start as 'Remote WebDriver mode' (embedded GhostDriver):

$ docker run -d -p 8910:8910 wernight/phantomjs phantomjs --webdriver=8910

To connect to it (some examples per language):

  • Java:

    WebDriver driver = new RemoteWebDriver(
        new URL("http://127.0.0.1:8910"),
        DesiredCapabilities.phantomjs());
    
  • Python (after running $ pip install selenium):

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    driver = webdriver.Remote(
        command_executor='http://127.0.0.1:8910',
        desired_capabilities=DesiredCapabilities.PHANTOMJS)
    
    driver.get('http://example.com')
    driver.find_element_by_css_selector('a[title="hello"]').click()
    
    driver.quit()
    

Feedbacks

Improvement ideas and pull requests are welcome via Github Issue Tracker.