我正在尝试滚动到动态加载页面的末尾,当您按下结束键时,它将加载一个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
答案 0 :(得分:0)
如果没有任何HTML
使您将代码块作为基线,我建议您进行以下更改:
而不是使用send_keys(Keys.END)
使用Javascript
向下滚动,如下所示:
wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
我们不要修改默认的轮询间隔,并将其保留为默认值500毫秒。
WebDriverWait(wd, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img')))
最后,在我们等待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']")))
如果修改上述要点并不能解决您的问题,那么作为最后的手段会导致某些硬核等待网页在每次滚动后呈现,以便下一次scroll
可能发生。
您的最终代码块可能如下所示:
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