Seleniumの最小perlスクリプトは何ですか?

Jan 03 2021

私は自作を使用して、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.

今、私は自分が何をしているのか分かりません。そして、私はおそらく非推奨となるはずのいくつかのWebソースから作業しています。これを開始する前に、geckodriver(またはchromedriver)を手動で実行する必要がありますか?そうでない場合は、少なくともコードで呼び出すものを指定する必要がありますか?どちらも私のパス環境で利用できます。まだインストールしていない3番目のコンポーネントはありますか?おそらくブラウザのアドオン?

私の唯一の目標は、(現時点では)Webページをブラウザーにロードする場所に到達することです(この時点でヘッドレスではないことが望ましいので、それが何をするかを確認できます)。

回答

3 ikegami Jan 03 2021 at 13:29

Chrome固有ですが、以下は最小限のSeleniumソリューションです。

use FindBin          qw( $RealBin ); use Selenium::Chrome qw( ); my $web_driver = Selenium::Chrome->new(
   binary => "$RealBin/chromedriver.exe", ); $web_driver->get('https://www.stackoverflow.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.stackoverflow.com/');