如果页面不断刷新,如何让Web驱动程序看到一个元素?

时间:2017-01-12 15:25:48

标签: python selenium selenium-webdriver

我想要浏览的网页包含指向不同新闻文章的链接列表。在脚本中,我让驱动程序单击链接并等待加载“h1”元素,然后检查该元素的文本以查找不同的关键字以确保它是正确的页面。然而,其中一篇新闻文章页面未能看到“h1”元素,即使在我检查页面时它显然存在。

该页面有多个视频和广告,当您点击页面时会自动播放,我的理论是因为它不断刷新页面,并且不会给“h1”元素加载时间导致超时。我的问题是有没有办法让我可以通过停止加载或让页面等待另一个元素加载来看到这个“h1”元素?我用完了解决方案。以下是循环链接的代码片段。

 for headline in list_of_headlines:
     print "'" + headline + "'"
     art = wait.until(EC.presence_of_element_located((By.LINK_TEXT, headline)))
     art.click()
     driver.switch_to_window(driver.window_handles[1])
     title = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'h1')))
     print title.text.lower()
     if "KEYWORD".lower() in title.text.lower():
         print "Match"
     elif "KEYWORD".lower() in title.text.lower():
         print "Match"
     elif "KEYWORD".lower() in title.text.lower() or "KEYWORD".lower() in title.text.lower():
         print "Match"
     elif "KEYWORD".lower() in title.text.lower():
         print "Match"
     else:
         print "Wrong Page"

     driver.close()
     driver.switch_to_window(d.main_window)

1 个答案:

答案 0 :(得分:0)

尝试使用以下代码来中断页面加载,并在出现任何问题时通知我:

from selenium.webdriver.common.keys import Keys

driver.switch_to_window(driver.window_handles[1])
wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body'))).send_keys(Keys.ESCAPE)
title = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'h1')))

另一种方法是使用Firefox + FirefoxProfile设置页面加载限制(例如,不超过5秒):

fp = webdriver.FirefoxProfile()
fp.set_preference("http.response.timeout", 5)
fp.set_preference("dom.max_script_run_time", 5)
driver = webdriver.Firefox(firefox_profile=fp)

您还应该尝试

driver.switch_to_window(driver.window_handles[1])
driver.execute_script('window.stop();')
title = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'h1')))

但我不确定这种方法......