等待页面加载Selenium WebDriver for Python

发布于 2021-02-02 23:20:26

我想抓取无限滚动实现的页面的所有数据。以下python代码有效。

for i in range(100):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(5)

这意味着每次我向下滚动到底部时,我需要等待5秒钟,这通常足以使页面完成加载新生成的内容。但是,这可能不是省时的。该页面可能会在5秒内完成新内容的加载。每次向下滚动时,如何检测页面是否完成了新内容的加载?如果可以检测到此情况,则在知道页面加载完成后,可以再次向下滚动以查看更多内容。这样更省时。

关注者
0
被浏览
168
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    webdriver会通过等待页面加载默认.get()的方法。

    正如你在寻找@ user227215所说的某些特定元素一样,你应该使用它WebDriverWait来等待页面中的某个元素:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.common.exceptions import TimeoutException
    
    browser = webdriver.Firefox()
    browser.get("url")
    delay = 3 # seconds
    try:
        myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
        print "Page is ready!"
    except TimeoutException:
        print "Loading took too much time!"
    

    我用它来检查警报。你可以使用任何其他类型的方法来查找定位器。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看