返回

Symfony Panther:在无 GUI 模式下运行 Selenium

php

在 Symfony Panther 中无 GUI 模式运行 Selenium

问题

如何关闭 GUI 界面,在无 GUI 模式下运行使用 “createSeleniumClient” 的 Symfony Panther?

解决方法

在 Symfony Panther 中,使用 createSeleniumClient 方法创建 Selenium 客户端时,默认情况下 GUI 界面是开启的。要关闭 GUI 界面,可以使用以下步骤:

  1. 修改 Selenium 选项: createSeleniumClient 方法接受一个名为 options 的数组参数。该数组中可以指定浏览器选项,包括 --headless 选项。--headless 选项将禁用 GUI 界面。
  2. 创建 Selenium 客户端: 使用修改后的 options 数组创建 Selenium 客户端。例如:
$caps = DesiredCapabilities::chrome();
$caps->setCapability('chromeOptions', ['args' => ['--headless']]);

$client = Client::createSeleniumClient(
    'http://localhost:4444/wd/hub',
    $caps,
    null,
);

实际应用

在 Laravel 11 中,创建一个名为 BrowserScrape.php 的自定义 CLI 命令。在该命令中,可以使用以下代码创建无 GUI 界面模式的 Selenium 客户端:

use Symfony\Component\Panther\Client;
use Facebook\WebDriver\Remote\DesiredCapabilities;

// ...

$capabilities = array( // See https://www.browserstack.com/docs/automate/capabilities
    "os"                       => "Windows",
    "os_version"               => "11",
    "browser"                  => "Chrome",
    "browser_version"          => "latest",
    "name"                     => "Test",
    "build"                    => "Build 1.0",
    "browserstack.debug"       => true,
    "browserstack.console"     => "info",
    "browserstack.networkLogs" => true,
    "disableCorsRestrictions"  => true,
    "wsLocalSupport"           => true,
    "geoLocation"              => "GB"
);
$caps = DesiredCapabilities::chrome();
foreach ($capabilities as $key => $value) {
    $caps->setCapability($key, $value);
}
$client = Client::createSeleniumClient(
    'http://localhost:'.config('app.selenium_grid_port').'/wd/hub',
    $caps,
    null,
    [
        '--headless',
    ],
);

// ...

然后,使用以下命令即可在无 GUI 模式下运行 Selenium:

php artisan browser:scrape

常见问题解答

Q1. 我可以使用 PANTHER_NO_HEADLESS 环境变量来禁用 GUI 吗?

A1. PANTHER_NO_HEADLESS 环境变量仅适用于 createChromeClient 方法。对于 createSeleniumClient 方法,请使用 options 数组中的 --headless 选项。

Q2. 我尝试了上述方法,但 GUI 仍然开启。

A2. 确保 --headless 选项在 options 数组中正确指定,并且 Selenium 驱动程序已更新为最新版本。

Q3. 无 GUI 模式与 headless 模式有什么区别?

A3. 无 GUI 模式禁用 GUI 界面,而 headless 模式还禁用沙箱和渲染过程。

Q4. 我可以在无 GUI 模式下使用哪些浏览器?

A4. 无 GUI 模式支持大多数主流浏览器,包括 Chrome、Firefox、Edge 和 Safari。

Q5. 无 GUI 模式的优势是什么?

A5. 无 GUI 模式的优势包括:

  • 更高的效率: 由于没有图形界面开销,测试运行速度更快。
  • 资源利用更低: 无 GUI 模式需要更少的内存和 CPU 资源。
  • 自动化更简单: 无 GUI 模式消除了与 GUI 交互相关的挑战,使自动化任务更加简单。

结论

在 Symfony Panther 中使用 createSeleniumClient 方法时,通过指定 --headless 选项,可以轻松关闭 GUI 界面,在无 GUI 模式下运行 Selenium。这可以显着提高效率、减少资源利用并简化自动化任务。