当我有异常时,为什么会出现 NoSuchElement 错误?

Why do I get NoSuchElement error when I have a exception in place?

我有这个可以检查 iframe 是否可用并切换到它。然后我有这段代码检查某个元素是否存在。

WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, '//*[@id="stageFrame"]'))) 
try:
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="home_video_js"]')))
except NoSuchElementException:
    print("No video located")

我不确定为什么我仍然收到错误消息:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="stageFrame"]"}

可能我遗漏了一些重要的东西,但我不知道。

首先, 的代码行超出了 try-except{} 块的范围。所以它永远不会被处理。

接下来,由于您在失败时使用了 WebDriverWait 它应该 return TimeoutException

最后,由于您 使用 id 属性以使其更加规范,您可能希望添加 TAG_NAME 也就是 iframe 。所以有效的代码块将是:

try:
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@id="stageFrame"]'))) 
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="home_video_js"]')))
except TimeoutException:
    print("No iframe/video located")