20

Is there a headless browser library for PHP? Would like something that has a JS engine built into it. FOSS preferred.

3
  • PHP really sucks for this task. The only thing close to fully php is Selenium and that's not really the best either since it just manipulates the brwoser and not really headless. Commented Nov 16, 2012 at 22:08
  • What do You need as backend? Fully-transformer DOM tree or graphics? If graphics -- you will not have any 'headless' solution at all: it will have X.org dependencies anyway. Commented Nov 22, 2012 at 17:46
  • 2
    7 years later, now google chrome offers a headless version that you can find a php lib to manipulate it right there: github.com/chrome-php/headless-chromium-php Commented Apr 27, 2018 at 11:33

7 Answers 7

23

PhantomJS - http://phantomjs.org/

PhantomJS is a headless WebKit with JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.

You can couple it with something like php-PhantomjsRunner (now deprecated) if you want or bake your own.

When setup and ready to start testing with PhantomJS, pick out one of the various Testing Frameworks at your disposal.

I recently also came across this tutorial from tutsplus should it help anyone.

Sign up to request clarification or add additional context in comments.

5 Comments

PHP not JS.....
@JoeRegan Updated answer and included some more PHP resources. PHP is just a means to an end and in the end OP needs javascript. A full PHP solution will ultimately suck or just can't be done without calling some other command line program.
@AnthonyHatzopoulos i don't think thats what he is asking. Full PHP solution as far as i can read.
@JoeRegan Actually webkit is C and C++. PhantomJS uses JS to run its scripts, and for good reason (you can easily interleave the PhantomJS controlling JS with the running page JS - I have, and it rocks). You could write a small RPC server to "bridge" the PhantomJS running instance with your PHP running application. What more do you want?
8

Check out mink and it's support for zombie as a back-end.

It looks quite good, and appears to be well supported.


Edit:

Unfortunately, php has no native javascript interpreter; so if you are looking for a pure php implementation including javascript support, currently, you will not find it. For headless with javascript support, you will have to rely on something like node.js or phantomjs on the back-end.

I'm sure you've seen them already, but for other options that are either headed or lack javascript support, Mink's other backends are worth perusing.

3 Comments

If it uses zombie that means it uses node.js ?
Yep, zombie uses node.js
For Javascript in PHP: include-once.org/p/phpjs
4

You sound like you need http://seleniumhq.org/ which can also be used with PHPUnit to run unit tests.

Also take a look at SimpleTest Browser.

3 Comments

Headless folks. Just like phantomjs but for php.
Your link to the SimpleTest browser is broken, but you can find it here: simpletest.sourceforge.net/en/browser_documentation.html
3

Goutte is a simple headless browser for PHP. https://github.com/fabpot/Goutte

Unfortunately it doesn't support JS.

Comments

1

Well, someone could create a bastard headless web browser running in PHP, complete with Javascript support implemented in PHP!

1 Comment

Intriguing, but I would not recommend using something like that yet in a production environment; they say it is in "early alpha".
0

If you're not limited to PHP, or you're able to use system calls, check out xvfb, it's a virtual frame buffer, and you can use that to run Linux based browsers (firefox) with complete JS functionality. You can even pull in the screen data too, and write it to a file.

I've done this before when gathering specific metrics.

1 Comment

Headless? PHP? Needs no external browser?
0

Use the HTMLUnit driver, which is part of the Selenium project. WebDriver is based on Webkit (I believe) and so using HTMLUnit (from Selenium) basically is the Java solution. Then, I believe you can call Java code from PHP, although I am unsure on what the details are of getting that working.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.