如何等待特定命令在selenium中完成

时间:2017-06-06 10:35:49

标签: python selenium

我正在尝试从看起来像link to the site

的网页中获取一些信息

我需要一直向下滚动,我为此编写了一个函数。

def Scroll(): 
    startPos = driver.execute_script("return window.pageYOffset;")
    while 1:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #need to wait
        time.sleep(0.1)
        newPos = driver.execute_script("return window.pageYOffset;")
        if newPos == startPos:
            break
        startPos = newPos
return

我想用一些条件等待更改time.sleep(0.1),直到执行该行之前的行,有没有办法做到这一点?每次滚动后或页面末尾都没有加载特殊元素。

解决方案:

...
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
while 1:
    if driver.execute_script("return jQuery.active == 0"):
        break
    else:
        time.sleep(0.05)
        continue
...

1 个答案:

答案 0 :(得分:0)

而不是thread.sleep,您可以使用以下代码等待Ajax调用完成,因为每个滚动,后台都会有一个Ajax调用。

WebDriverWait wait=new WebDriverWait(driver, 120);

Wait.until(ExpectedConditions.jsReturnValue("return jQuery.active == 0"));