使用Selenium Python API确认图像加载的选择器

0 投票
1 回答
1574 浏览
提问于 2025-04-17 23:42

我想找个方法来确认图片确实加载完成了。也许可以用JavaScript?现在我在用 WebdriverWait 来强制等待所有图片加载,然后再检查实际的 src,最后才开始我的测试……

wait = WebDriverWait(driver, 10)
...
albums = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".albums .album img")))
        albumslength = len(albums)-1
        while albumslength > 0:
            wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ('.album:nth-child('+str(albumslength)+') img[src*="album-foo"]'))))
            albumslength -= 1
...

这样做可以在某个时刻确认album-foo确实存在于每个相册的 <img src="http://www.album-foo/images/blah.jpg" 中。但这并不能确认图片是否已经完全加载到视图中。我到处查找过,谁有解决办法吗?

我是在Chrome和Firefox上测试,所以没有phantom或IE的限制,如果有想法涉及到JavaScript或相关的想法,可能会有环境限制。

1 个回答

0

我对selenium不是很熟悉,不过我会试试看。

如果你想检查一张图片是否加载完成,我建议你使用一个布尔值。可以把这个布尔值,比如叫它'loaded',的初始值设为false,也就是表示图片还没加载。

然后你只需要调用类似下面的代码,确保在图片加载完成的那一刻,这个值会变成true。

Boolean loaded = false;

WebDriver driver = new AnyDriverYouWant();
JavascriptExecutor js;
if (driver instanceof JavascriptExecutor) {
    js = (JavascriptExecutor)driver;
}
loaded = (Boolean)js.executeScript("image.onload(function() { return true; });");

撰写回答