⏱️

SeleniumでinnerHTMLやouterHTMLを取得したい場合はページロードを待たないといけない

2022/02/28に公開
stale element reference: element is not attached to the page document (Session info: headless chrome=96.0.4664.93)

結論

document.readyStateがcompleteになるまで待機する

Javaの例

void waitForLoad(WebDriver driver) {
        new WebDriverWait(driver, Duration.ofSeconds(30)).until((ExpectedCondition<Boolean>) wd ->
                ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));
}

PHPの例

$to->getDriver()->wait()->until(function () use(&$to){
	return $to->getDriver()->executeScript('return document.readyState') === 'complete';
});

getAttribute経由でinnnerHTMLは各言語によって実装が異なるため推奨しません。

//deprecated
elem.getAttribute("innerHTML");

参考
https://stackoverflow.com/questions/15122864/selenium-wait-until-document-is-ready

Discussion