Qual é o script perl mínimo para Selenium?
Usei o homebrew para instalar as versões mais recentes do geckodriver e do chromedriver. Eu prefiro o primeiro, mas estaria disposto a usar qualquer um se funcionasse. Eu instalei com o console cpan o módulo Selenium :: Remote :: Driver também, e ele instalei sem quaisquer avisos. Atualmente estou trabalhando com os exemplos de trechos de código emhttps://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 executar o script, recebo o seguinte erro:
Selenium server did not return proper status at /Library/Perl/5.18/Selenium/Remote/Driver.pm line 544.
Agora, eu não tenho ideia do que estou fazendo. E estou trabalhando com algumas fontes da web que provavelmente deveriam ser descontinuadas. Preciso executar manualmente o geckodriver (ou chromedriver) antes de iniciar isso? Se não, preciso pelo menos especificar qual invocar em meu código? Ambos estão disponíveis em meu caminho env. Existe algum terceiro componente que ainda não instalei? Possivelmente um complemento do navegador?
Meus únicos objetivos são (neste ponto) fazer com que carregue uma página da web em um navegador (de preferência, não sem cabeçalho neste momento, para que eu possa ver o que faz).
Respostas
Embora específico do Chrome, o seguinte é uma solução mínima de 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();
Eu queria lidar com exceções, então usei isso:
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/');