Yes, Symfony Panther is compatible with headless browsers like Chrome and Firefox. Symfony Panther is a browser testing and web scraping library for PHP that leverages the WebDriver protocol. It provides a convenient API to control headless versions of these browsers or to automate them in a non-headless mode.
Symfony Panther works with Chrome through the ChromeDriver and with Firefox through the GeckoDriver. When you use Panther, it starts the chosen browser in headless mode by default, which is ideal for automated testing and scraping tasks where a visual browser interface is unnecessary.
Here's how you can use Symfony Panther with headless Chrome or Firefox:
Installation
First, you need to install Symfony Panther in your PHP project. You can do this using Composer:
composer require symfony/panther
Usage with Chrome
To use Panther with headless Chrome, you need to have Chrome and ChromeDriver installed. Panther will attempt to use ChromeDriver automatically.
Here is a basic example of using Symfony Panther with headless Chrome:
<?php
require __DIR__.'/vendor/autoload.php'; // autoload from Composer
use Symfony\Component\Panther\PantherTestCase;
class MyPantherTest extends PantherTestCase
{
public function testMyApp()
{
$client = static::createPantherClient(); // This will start Chrome in headless mode
$crawler = $client->request('GET', 'https://example.com');
// Your testing or scraping logic goes here
$this->assertSame('Example Domain', $crawler->filter('h1')->text());
}
}
Usage with Firefox
To use Panther with headless Firefox, you need to have Firefox and GeckoDriver installed. You can tell Panther to use Firefox by setting the PANTHER_NO_HEADLESS
and PANTHER_WEB_SERVER_PORT
environment variables before running your test or script.
<?php
$_SERVER['PANTHER_NO_HEADLESS'] = 0; // Enable headless mode
$_SERVER['PANTHER_WEB_SERVER_PORT'] = 9080; // Use a custom web server port
$_SERVER['PANTHER_BROWSER'] = 'firefox'; // Use Firefox
require __DIR__.'/vendor/autoload.php'; // autoload from Composer
use Symfony\Component\Panther\PantherTestCase;
class MyPantherTest extends PantherTestCase
{
public function testMyApp()
{
// This will start Firefox in headless mode
$client = static::createPantherClient(array(
'browser' => static::FIREFOX,
));
$crawler = $client->request('GET', 'https://example.com');
// Your testing or scraping logic goes here
$this->assertSame('Example Domain', $crawler->filter('h1')->text());
}
}
Remember that the PANTHER_BROWSER
environment variable should be set to 'firefox' to instruct Panther to use GeckoDriver and Firefox instead of ChromeDriver and Chrome.
Notes
- Make sure to install the appropriate driver for the browser you intend to use. ChromeDriver is for Chrome, and GeckoDriver is for Firefox.
- Headless browsers run without a graphical user interface, making them faster and more suitable for automated testing or scraping tasks.
- Panther is primarily intended for testing Symfony applications, but it can be used for web scraping or testing any web application that can be loaded in a browser.
By using Symfony Panther with headless browsers, you can automate browser tasks, perform end-to-end testing, and scrape web content effectively.