Невозможно получить веб-страницу на сайте, управляемом Asp, используя Perl / Selenium :: Remote :: Driver - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь очистить данные от https://investors.com, используя Perl / S: R: D.

Поскольку данные, которые я хочу получить, доступны только после входа в систему, первое, что нужно сделать, - это получить страницу входа. Код выглядит следующим образом:

use strict;
use warnings;

use Selenium::Remote::Driver;

my $wait_period = $ENV{ SP_WAIT_PERIOD } ? $ENV{ SP_WAIT_PERIOD } : 5;

my $selen=Selenium::Remote::Driver->new( browser_name => 'firefox' );

print STDERR "INFO: Created new Web Driver instance.\n";

#my $url="https://myibd.investors.com/secure/signin.aspx?eurl=https://www.investors.com/";
my $url="https://www.investors.com/";

$selen->set_timeout( 'page load', 60000);
$selen->set_timeout( 'implicit', 100);
$selen->get( $url );

sleep( $wait_period );

my $fh;
open( $fh, ">", "first_page.htm");
print $fh $selen->get_page_source();
close( $fh );

my $elem;
#eval{ $elem = $selen->find_element( "(//button[\@id='gdpr-accept-button'])" ); };

eval{ $elem = $selen->find_element( "(//a[\@id='signin-link'])" ); };

if ( $@ ) {

   die( "ERROR: Could not locate element using xpath " .
            "//a[\@id='signin-link']." );

}

my $trials = 0;
my $retcode;
while ( $trials < 10 ) {

   eval { $retcode = $elem->click() };

   if ( $@ ) {

      warn( "ERROR: Could not navigate to login page. $@" );

   }

   if ( $retcode ) {

      print STDERR "Click successful, waiting for page to load ...\n";
      sleep( 20 );
      last;

      }

   $trials++;
   print STDERR "\$retcode: $retcode\n";

   sleep( 1 );

}

open( $fh, ">", "second_page.htm");
print $fh $selen->get_page_source();
close( $fh );

Интересно, что при попытке загрузить первую страницу веб-драйвер перенаправляется на совершенно другую страницу (страницу, инструктирующую пользователя о соответствии GDPR), в отличие от того, что я вижу при загрузке https://investors.com в окно браузера.

Следовательно, кнопка входа не может быть найдена (программным) клиентом, и я получаю (в дополнение к (ошибочному) first_page.htm) следующий вывод на STDERR:

INFO: Created new Web Driver instance.
Wide character in print at ./stock_scraper.pl line 45.
ERROR: Could not locate element using xpath //a[@id='signin-link']. at ./stock_scraper.pl line 55.

Что здесь не так? И: возможно ли войти на сайт, отправив форму «напрямую», то есть без необходимости использовать ссылку для входа на первой странице, например, отправив URI, как я могу сделать это с «нормальным» HTML-форма с использованием GET в качестве метода запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...