如果我加载一个页面,页面中有一些错误,会有一条消息出现5到10秒,消息是“更新数据时出错”。如何在页面加载时检查此错误是否存在?开发人员给了我这个标签的id,它以span开头。
我希望使用selenium和python检查页面加载时是否出现此标签。基本上是在加载时检查页面中是否有任何错误。我们大约有20到30个页面,所以必须检查每个页面是否加载没有任何错误
发布于 2021-03-09 04:51:38
如果您想要检查多个页面,这实际上取决于您尝试检查的页面列表的类型。
如果它是一个页面列表,比如"https://qwant.com“,然后是"https://duckduckgo.com”,那么您可能希望在一个循环中遍历它们,每个迭代都有一个惟一的.get请求。在这种情况下,这取决于您如何存储链接列表。如果它是在一个简单的列表中,你可以很容易地为列表中的每个url使用.get。假设您在"urls“列表中存储了一个链接列表。所以:
# Your urls list
urls = ["https://qwant.com", "https://duckduckgo.com", "https://startpage.com"]然后使用for循环遍历列表中的每个链接:
for url in urls:
driver.get(url)
# Do the actions that you need here现在来检查消息id。您还没有提供ID,所以我不确定ID是简单的ID,还是XPath。但是,您可以同时使用这两种方法,这取决于您拥有哪种方法。我们当然希望等待消息是否会在页面上弹出。但是,重要的是要注意,如果消息没有出现,您将获得TimeoutException,并且您的程序将被终止。为了防止出现这种情况,您需要使用try和except来查看消息是否出现。
要做到这一点,您首先需要引入一个WebDriverWait,其中指定了Selenium在查找元素之前应该等待多长时间。我们可以这样定义WebDriverWait:
wait = WebDriverWait(driver, 20)在本例中,"driver“是您在上面的代码中定义的WebDriver的名称。
然后,您可能希望等待元素出现。您将使用新的等待方法来等待它出现。在使用简单ID的情况下,您将执行以下操作:
wait.until(ec.presence_of_element_located((By.ID, "element-id")))您已经提到ID包含span,这使我相信您可能已经获得了XPath标识符。如果是这种情况,只需修改代码以搜索具有该ID的XPath:
wait.until(ec.presence_of_element_located((By.XPATH, "//span[@id="element-id"]")))但是,如果错误框中的文本是唯一的,并且您不确定ID,则还可以搜索错误本身的文本:
wait.until(ec.presence_of_element_located((By.XPATH, "//span[contains(text(), 'Error updating data')]")))现在,正如我在开始时提到的,由于您应该检查是否存在错误,因此预计有时可能不存在。为了防止TimeoutException的发生,您可能希望将代码包装在一个try/except语句中,以检查它是否实际存在,如果不存在,则跳过它。所以你会做类似这样的事情:
try:
wait.until(ec.presence_of_element_located((By.XPATH, "//span[contains(text(), 'Error updating data')]")))
except TimeoutException:
pass尽管要注意这一点很重要,但您的项目需要像这样导入Selenium异常库:
from selenium.common.exceptions import WebDriverException, TimeoutException这同样适用于我们在开始时使用的WebDriverWait,即:
from selenium.webdriver.support.ui import WebDriverWait所有这些都表明,您的最终代码可能如下所示:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.common.exceptions import TimeoutException
# Define WebDriver and WebDriverWait here
driver = webdriver.Firefox(executable_path="/geckdriver")
wait = WebDriverWait(driver, 20)
# Your urls list
urls = ["https://qwant.com", "https://duckduckgo.com", "https://startpage.com"]
# Iterate through every page in the urls list
for url in urls:
driver.get(url)
try:
wait.until(ec.presence_of_element_located((By.XPATH, "//span[contains(text(), 'Error updating data')]")))
print(f"Error code found on page {url}")
except TimeoutException:
passhttps://stackoverflow.com/questions/66535170
复制相似问题