Qual è lo script Perl minimo per Selenium?
Ho usato homebrew per installare le ultime versioni di geckodriver e chromedriver. Preferisco il primo, ma sarei disposto a usarli se funzionassero. Ho installato con la console cpan anche il modulo Selenium :: Remote :: Driver, che è stato installato senza alcun avviso. Attualmente sto lavorando dagli snippet di codice di esempio suhttps://metacpan.org/pod/Selenium::Remote::Driver .
use Selenium::Remote::Driver;
my $driver = Selenium::Remote::Driver->new; $driver->get('http://www.google.com');
$driver->quit();
Quando tento di eseguire lo script, ricevo il seguente errore:
Selenium server did not return proper status at /Library/Perl/5.18/Selenium/Remote/Driver.pm line 544.
Ora, non ho idea di cosa sto facendo. E sto lavorando da alcune fonti web che probabilmente dovrebbero essere deprecate. Devo eseguire manualmente geckodriver (o chromedriver) manualmente prima di avviarlo? In caso contrario, devo almeno specificare quale invocare nel mio codice? Entrambi sono disponibili nel mio percorso env. C'è qualche terzo componente che devo ancora installare? Forse un componente aggiuntivo del browser?
I miei unici obiettivi sono (a questo punto) portarlo dove carica una pagina web in un browser (preferibilmente non senza testa in questo momento, in modo che io possa vederlo fare quello che fa).
Risposte
Sebbene specifico per Chrome, la seguente è una soluzione minima di selenio:
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();
Volevo gestire le eccezioni, quindi ho effettivamente usato questo:
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/');