Jaki jest minimalny skrypt Perla dla Selenium?

Jan 03 2021

Użyłem homebrew do zainstalowania najnowszych wersji geckodriver i chromedriver. Wolę te pierwsze, ale chętnie skorzystam z nich, jeśli zadziałają. Wraz z konsolą cpan zainstalowałem również moduł Selenium :: Remote :: Driver i zainstalowałem go bez żadnych ostrzeżeń. Obecnie pracuję z przykładowych fragmentów kodu nahttps://metacpan.org/pod/Selenium::Remote::Driver .

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

Kiedy próbuję uruchomić skrypt, pojawia się następujący błąd:

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

Teraz nie mam pojęcia, co robię. Pracuję na niektórych źródłach internetowych, które prawdopodobnie powinny zostać wycofane. Czy muszę ręcznie uruchomić geckodriver (lub chromedriver) ręcznie, zanim zacznę? Jeśli nie, czy muszę przynajmniej określić, który element wywołać w moim kodzie? Oba są dostępne w mojej ścieżce env. Czy jest jeszcze jakiś trzeci komponent, którego jeszcze nie zainstalowałem? Może dodatek do przeglądarki?

Moim jedynym celem jest (w tym momencie) uzyskanie go tam, gdzie ładuje stronę internetową w przeglądarce (najlepiej nie bezgłośnie w tym momencie, aby zobaczyć, jak robi to, co robi).

Odpowiedzi

3 ikegami Jan 03 2021 at 13:29

Chociaż jest specyficzne dla Chrome, poniższe rozwiązanie jest minimalnym rozwiązaniem 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();

Chciałem obsługiwać wyjątki, więc faktycznie użyłem tego:

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