Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果页面不断刷新,如何让web驱动程序看到元素?_Python_Selenium_Selenium Webdriver - Fatal编程技术网

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

Python 如果页面不断刷新,如何让web驱动程序看到元素?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我想浏览的网页有一个指向不同新闻文章的链接列表。在脚本中,我让驱动程序单击链接并等待“h1”元素加载,然后检查该元素的文本以查找不同的关键字,以确保它是正确的页面。然而,其中一个新闻文章页面没有看到“h1”元素,即使当我检查页面时,它清楚地存在 该页面有多个视频和广告,当你点击该页面时会自动播放,我的理论是,正因为如此,它会不断刷新页面,不会给“h1”元素加载时间,从而导致超时。我的问题是,有没有一种方法可以通过停止加载或让页面等待另一个元素加载来查看这个“h1”元素?我已经没有办法了。下面是循

我想浏览的网页有一个指向不同新闻文章的链接列表。在脚本中,我让驱动程序单击链接并等待“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)

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

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
秒):

你也应该试试

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')))

但我不确定这种方法…

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

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
秒):

你也应该试试

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')))

但是我不确定这种方法…

在您的代码中,您已经在等待h1出现,在单击
art
是一个链接之后,当它被单击时,一个新的选项卡将打开文章页面。因此,第二次等待是另一个窗口。在您的代码中,您已经在等待h1出现在单击
art
链接之后,当它被单击时,一个新选项卡将打开文章页面。所以第二个等待是另一个窗口。看起来这些窗口都不起作用,我认为我对文本为什么不显示的说法不正确。我已经在另一个脚本中隔离了该页面,并打印了
标题
标题.文本
,并且找到了webelement,但由于某种原因,文本显示为空白。您的定位器太宽了。您确定需要页面上的第一个
h1
元素吗?可能还有一些隐藏的
h1
或者是空的?这些看起来都不起作用,我想我不知道为什么文本没有显示。我已经在另一个脚本中隔离了该页面,并打印了
标题
标题.文本
,并且找到了webelement,但由于某种原因,文本显示为空白。您的定位器太宽了。您确定需要页面上的第一个
h1
元素吗?可能还有一些隐藏的
h1
或空的?