Selenium WebDrive проблемы с foreach - PullRequest
0 голосов
/ 25 ноября 2018

Поэтому я пытаюсь выполнить foreach с полученными ссылками, но код внутри foreach просто работает для первой ссылки, после этого он больше не работает, и я получил это сообщение об ошибке.

    $links = $driver->findElements( WebDriverBy::xpath( '//*[@id="ctl00_ContentBody_grvStudentResult"]/tbody/tr/td/span/a' ) );
foreach( $links as $key => $value )
{
    $link = $value->getAttribute( 'href' );
    $rawPage = $driver->get( $link );

    $dados = $rawPage->findElement( WebDriverBy::cssSelector( '#fmvSession tbody tr td h2' ) )->getText();
    $a = explode( ': ', $dados );
    $b = explode( ', ', $a[ 1 ]);
    echo "01: " . trim( $b[ 0 ] ) . "\n";
    echo "02: " . trim( $b[ 1 ] )  . "\n";
}

Сообщение об ошибке:

Неустранимая ошибка: Uncaught Facebook \ WebDriver \ Exception \ StaleElementReferenceException: ссылка на устаревший элемент: элемент не прикреплен к документу страницы
(информация о сеансе: chrome = 70.0.3538.102)

1 Ответ

0 голосов
/ 25 ноября 2018

Когда вы переходите на другую страницу $links больше не действителен, вы находитесь на новой странице, поэтому ранее расположенные веб-элементы теперь устарели.Сохраните ссылки в виде списка строк и переберите его

$elements = $driver->findElements(WebDriverBy::xpath( '//*[@id="ctl00_ContentBody_grvStudentResult"]/tbody/tr/td/span/a'));

$links = [];
foreach ($elements as $element) {
    $links[] = $element->getAttribute('href');
}

foreach($links as $link)
{
    $rawPage = $driver->get($link);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...