为什么WebDriverWait不会以这种方式工作? Python selenium

时间:2017-10-25 09:37:58

标签: python selenium

我正在尝试滚动到动态加载页面的末尾,当您按下结束键时,它将加载一个gif以指示它正在加载更多内容。我想等待gif可见,然后在我再次按结束键之前不可见(因此它不在页面上)。当我使用这段代码时,它将无法工作并且在隐身等待时间超时,任何人都可以对此有所了解吗?

while True:
    wd.find_element_by_xpath('//body').send_keys(Keys.END)
    try:
        WebDriverWait(wd, 10, poll_frequency = 0.08).until(
            EC.visibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img')))
        WebDriverWait(wd, 10, poll_frequency = 0.08).until(
            EC.invisibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img')))
    except TimeoutException:
        break

1 个答案:

答案 0 :(得分:0)

如果没有任何HTML使您将代码块作为基线,我建议您进行以下更改:

  1. 而不是使用send_keys(Keys.END)使用Javascript向下滚动,如下所示:

    wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
  2. 我们不要修改默认的轮询间隔,并将其保留为默认值500毫秒。

    WebDriverWait(wd, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img')))
    
  3. 最后,在我们等待invisibility_of_element_located的同时,我建议您稍微详细了解xpath

    WebDriverWait(wd, 10).until(EC.invisibility_of_element_located((By.XPATH, "//img[@any_of_the_img_attribute='img_attribute_value']")))
    
  4. 如果修改上述要点并不能解决您的问题,那么作为最后的手段会导致某些硬核等待网页在每次滚动后呈现,以便下一次scroll可能发生。

  5. 您的最终代码块可能如下所示:

    while True:
        wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        try:
            WebDriverWait(wd, 10).until(
            EC.visibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img')))
            WebDriverWait(wd, 10).until(
            EC.invisibility_of_element_located((By.XPATH, '//img[@any_of_the_img_attribute="img_attribute_value"]')))
            time.sleep(5)
        except TimeoutException:
            break