¿Cuál es el script perl mínimo para Selenium?

Jan 03 2021

He usado homebrew para instalar las últimas versiones de geckodriver y chromedriver. Prefiero el primero, pero estaría dispuesto a usar cualquiera de los dos si funcionaran. También instalé con la consola cpan el módulo Selenium :: Remote :: Driver, y lo instalé sin ninguna advertencia. Actualmente estoy trabajando con los fragmentos de código de ejemplo enhttps://metacpan.org/pod/Selenium::Remote::Driver .

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

Cuando intento ejecutar el script, recibo el siguiente error:

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

Ahora, no tengo ni idea de lo que estoy haciendo. Y estoy trabajando desde algunas fuentes web que probablemente deberían estar obsoletas. ¿Necesito ejecutar manualmente geckodriver (o chromedriver) antes de comenzar esto? Si no es así, ¿necesito al menos especificar cuál invocar en mi código? Ambos están disponibles en mi camino env. ¿Hay algún tercer componente que aún no haya instalado? ¿Un complemento de navegador posiblemente?

Mis únicos objetivos son (en este punto) conseguir que se cargue una página web en un navegador (preferiblemente no sin cabeza en este momento, para que pueda ver que hace lo que hace).

Respuestas

3 ikegami Jan 03 2021 at 13:29

Si bien es específico de Chrome, la siguiente es una solución mínima de 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();

Quería manejar excepciones, así que usé esto:

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/');