Selenium 的最小 perl 脚本是什么?

What is the minimum perl script for Selenium?

我使用自制软件安装了最新版本的 geckodriver 和 chromedriver。我更喜欢前者,但如果它们有效,我愿意使用其中任何一个。我也用 cpan 控制台安装了 Selenium::Remote::Driver 模块,并且安装时没有任何警告。我目前正在使用 https://metacpan.org/pod/Selenium::Remote::Driver 上的示例代码片段。

use Selenium::Remote::Driver;
 
my $driver = Selenium::Remote::Driver->new;
$driver->get('http://www.google.com');
$driver->quit();

当我尝试 运行 脚本时,收到以下错误:

Selenium server did not return proper status at /Library/Perl/5.18/Selenium/Remote/Driver.pm line 544.

现在,我不知道自己在做什么。我正在使用一些可能应该弃用的网络资源。在开始之前,我是否需要手动 运行 geckodriver(或 chromedriver)?如果不是,我是否需要至少指定在我的代码中调用哪个?两者都在我的路径环境中可用。我还没有安装第三个组件吗?可能是浏览器插件?

我唯一的目标是(在这一点上)让它将网页加载到浏览器中(此时最好不要无头,这样我就可以看到它在做什么)。

虽然 Chrome-specific,但以下是最小的 Selenium 解决方案:

use FindBin          qw( $RealBin );
use Selenium::Chrome qw( );

my $web_driver = Selenium::Chrome->new(
   binary => "$RealBin/chromedriver.exe",
);

$web_driver->get('https://www.whosebug.com/');

$web_driver->shutdown_binary();

我想处理异常,所以我实际使用了这个:

use FindBin             qw( $RealBin );
use Selenium::Chrome    qw( );
use Sub::ScopeFinalizer qw( scope_finalizer );

my $web_driver;
my $guard = scope_finalizer {
   if ($web_driver) {
      $web_driver->shutdown_binary();
      $web_driver = undef;
   }
};

$web_driver = Selenium::Chrome->new(
   binary => "$RealBin/chromedriver.exe",
);

$web_driver->get('https://www.whosebug.com/');