selenium execute_script() returns 不正确的值

selenium execute_script() returns incorrect value

我使用 python selenium chromedriver 在 https://www.youtube.com/user/JFlaMusic/videos 这样的浮动页面上执行了下面的代码。但是代码执行不正确。 我希望转到页面末尾,但 last_heightnew_height 一开始是相同的 while 条件循环。所以 break 被执行了。 为什么会出现这个结果?

last_height = self.driver.execute_script("return document.documentElement.scrollHeight")
print(last_height)
while True:
    self.driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    time.sleep(0.5)
    new_height = self.driver.execute_script("return document.documentElement.scrollHeight")
    print(new_height)
    if new_height == last_height:
        break
    last_height = new_height

与其使用看起来相当不可靠的 time.sleep(0.5),不如尝试如下实现 ExplicitWait 以等待页面滚动:

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.common.exceptions import TimeoutException

last_height = self.driver.execute_script("return document.documentElement.scrollHeight")
print(last_height)
while True:
    self.driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    try:
        wait(self.driver, 5).until(lambda driver: self.driver.execute_script("return document.documentElement.scrollHeight") > last_height)
    except TimeoutException:
        break
    last_height = self.driver.execute_script("return document.documentElement.scrollHeight")