Какой минимальный Perl-скрипт для Selenium?
Я использовал homebrew для установки последних версий geckodriver и chromedriver. Я предпочитаю первые, но был бы готов использовать любой, если бы они работали. Я также установил с помощью консоли cpan модуль Selenium :: Remote :: Driver, и он установился без каких-либо предупреждений. В настоящее время я работаю с примерами фрагментов кода наhttps://metacpan.org/pod/Selenium::Remote::Driver .
use Selenium::Remote::Driver;
my $driver = Selenium::Remote::Driver->new; $driver->get('http://www.google.com');
$driver->quit();
Когда я пытаюсь запустить сценарий, я получаю следующую ошибку:
Selenium server did not return proper status at /Library/Perl/5.18/Selenium/Remote/Driver.pm line 544.
Я понятия не имею, что делаю. И я работаю с некоторыми веб-источниками, которые, вероятно, следует исключить. Нужно ли мне вручную запускать geckodriver (или chromedriver), прежде чем я начну это? Если нет, мне нужно хотя бы указать, что вызывать в моем коде? Оба доступны на моем пути env. Есть ли третий компонент, который мне еще предстоит установить? Возможно, надстройка для браузера?
Моя единственная цель (на данный момент) - получить его там, где он загружает веб-страницу, в браузер (желательно не без заголовка в этот момент, чтобы я мог видеть, что он делает то, что делает).
Ответы
Хотя для Chrome характерно следующее минимальное решение 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();
Я хотел обрабатывать исключения, поэтому на самом деле использовал это:
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/');