use v5.34; use FindBin; use Data::Printer; use Selenium::Chrome; use Selenium::Firefox; use Feature::Compat::Class; package SeleniumRemoteDriver; #$Selenium::Remote::Driver::FORCE_WD3=1; system( 'pkill chrome' ); # in case previous run crashed system( 'pkill chromium' ); # in case previous run crashed # chromeOptions args (headless, disable images, etc): my @chromeArgs = qw( headless no-sandbox disable-gpu window-size=1024,768 remote-debugging-port=9222 ); my @firefoxArgs = qw( -headless ); # doesn't work class SeleniumDriver { field $disable_images :reader :param //= 0; field $debug :reader :param //= 0; # create a Selenium::Chrome object method chrome { push @chromeArgs, 'blink-settings=imagesEnabled=false' if $disable_images; # say $disable_images; my $driver = Selenium::Chrome->new( debug => $debug, logfile => "$FindBin::Bin/log.txt", pageLoadStrategy => 'eager', # probably makes no difference to page-load speed extra_capabilities => { 'goog:chromeOptions' => { # prefs => { 'profile.managed_default_content_settings.images' => 2 }, # doesn't work prefs => { }, args => \@chromeArgs, }, } ); if ($debug) { # Data::Printer::p $driver->available_engines(); # Data::Printer::p $driver->get_capabilities(); Data::Printer::p $driver->get_user_agent(); } return $driver; } # create a Selenium::Firefox object method firefox { my $driver = Selenium::Firefox->new( extra_capabilities => { 'moz:firefoxOptions' => { args => \@firefoxArgs } } ); return $driver; } } 1;