Selenium :: Remote :: Driver-过时的元素参考:元素未附加到页面文档

时间:2019-07-08 17:24:08

标签: selenium perl

编辑::页面加载后几秒钟,cookies警告被添加到页面上(我之前没有注意到,当然,我很长一段时间在浏览器中手动接受了它)时间之前)...我想这会使之前发生的一切无效。所以我只是在get()之后添加了wait,现在一切都很好了。

在第一个元素后的stale element reference: element is not attached to the page document处发现的WebElement上循环时,出现

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 个答案:

答案 0 :(得分:1)

А页面加载几秒钟后,“ cookies warning”被添加到页面中(我之前没有注意到,当然,很久以前我在浏览器中手动接受了它),...,我想,这会使之前发生的一切失效。因此,我只是在get()之后添加了一个等待,现在一切都很好了。