Selenium :: Remote :: Driver - ссылка на устаревший элемент: элемент не прикреплен к документу страницы - PullRequest
0 голосов
/ 08 июля 2019

РЕДАКТИРОВАТЬ: через несколько секунд после загрузки страницы на страницу добавляется предупреждение о файлах cookie (чего я раньше не замечал, и, конечно, я долгое время принимал его вручную в своем браузере) назад) ... что, я думаю, лишает законной силы то, что случилось до этого. поэтому я просто добавил wait после get () и теперь все хорошо.

stale element reference: element is not attached to the page document ошибка при циклическом просмотре веб-элементов, найденных с find_elements() после первого элемента.


Попытка запустить этот простой скрипт

use strict;
use warnings;
use feature qw/say/;

use Selenium::Chrome;
my $driver = Selenium::Chrome->new( binary => 'C:/path-to/chromedriver.exe' );

$driver->get( 'https://...' );

my $pdf_links = $driver->find_elements('//a[@class="file-link"]');

for my $link (@$pdf_links) {
    my $filename = $driver->find_child_element($link, "./span")->get_text();
    say $filename;
}

и я получаю эту ошибку:

first-file-name.pdf
Error while executing command: stale element reference: element is not attached to the page document
  (Session info: chrome=75.0.3770.100)
  (Driver info: chromedriver=75.0.3770.90 (a6dcaf7e3ec6f70a194cc25e8149475c6590e025-refs/branch-heads/3770@{#1003})
,platform=Windows NT 10.0.18362 x86_64) at C:/<path>/perl/perl/site/lib/Selenium/Remote/Driver.pm line 403.

 at C:/<path>/perl/perl/site/lib/Selenium/Remote/Driver.pm line 353.

@$pdf_links имеет более 160 элементов, но find_child_element() работает только на 1-й итерации.

1 Ответ

1 голос
/ 09 июля 2019

Через несколько секунд после загрузки страницы на страницу добавляется «предупреждение о куки» (чего я раньше не замечал, и, конечно, я давно принял его вручную в своем браузере) ... что, Я думаю, делает недействительным все, что случилось до этого. Итак, я добавил ожидание после get(), и теперь все хорошо.

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