RSS Git Download  Clone
Raw Blame History
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;