Symfony Panther:在无 GUI 模式下运行 Selenium
2024-03-25 19:11:02
在 Symfony Panther 中无 GUI 模式运行 Selenium
问题
如何关闭 GUI 界面,在无 GUI 模式下运行使用 “createSeleniumClient” 的 Symfony Panther?
解决方法
在 Symfony Panther 中,使用 createSeleniumClient
方法创建 Selenium 客户端时,默认情况下 GUI 界面是开启的。要关闭 GUI 界面,可以使用以下步骤:
- 修改 Selenium 选项:
createSeleniumClient
方法接受一个名为options
的数组参数。该数组中可以指定浏览器选项,包括--headless
选项。--headless
选项将禁用 GUI 界面。 - 创建 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。这可以显着提高效率、减少资源利用并简化自动化任务。