【问题标题】:catching error in python using try except使用 try except 在 python 中捕获错误
【发布时间】:2021-08-05 01:07:03
【问题描述】:

我有以下代码:

from selenium.webdriver import Firefox
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.common.exceptions import NoSuchElementException
import time

while True:
    try:
        
        url = 'https://finance.yahoo.com/'
        driver_path = 'C:\\Users\\inder\\geckodriver.exe'
        
        browser = Firefox(executable_path = driver_path)
        browser.get(url)
        
        search_field_id = 'yfin-usr-qry'
        
        element_search_field = browser.find_element_by_id(search_field_id)
        element_search_field.clear()
        element_search_field.send_keys('TSLA')
        element_search_field.send_keys(Keys.ENTER)
        time.sleep(5)
        xpath_string = '/html/body/div[1]/div/div/div[1]/div/div[2]/div/div/div[6]/div/div/section/div/ul/li[2]/a/span'
        element = browser.find_element_by_xpath(xpath_string)
        action_chains = ActionChains(browser)
        action_chains.move_to_element(element).click().perform()
        break
    except NoSuchElementException as e:
        print(e)
        pass
    
    
   

这段代码运行良好我想要做的是,如果由于某种原因页面没有正确加载,我希望整个代码块再次运行。 为此,我确定了搜索字段element_search_field。如果通常找不到该元素,我会收到错误消息:

NoSuchElementException: Unable to locate element: /html/body/div[1]/div/div/div[1]/div/div[2]/div/div/div[6]/div/div/section/div/ul/li[2]/a/span

但是,当我尝试使用上面的代码捕获此异常时,我收到了一个错误:

NameError: name 'NoSuchElementException' is not defined

请告知我可以做些什么来解决这个问题。

【问题讨论】:

  • 似乎您缺少一些导入。可以查一下吗?
  • 这是我的全部代码。您指的是哪些进口产品?

标签: python selenium error-handling try-catch


【解决方案1】:

你使用 pycharm 吗?如果你使用pycharm,它会提醒你代码错误 你应该这样做。

from selenium.common.exceptions import NoSuchElementException

我在你的代码中找不到声明变量 action_chains。这就像一个错误

【讨论】:

  • 还有其他问题吗?我建议在开始初始化而不是在while中初始化。像 browser = Firefox(executable_path = driver_path)... 你只想在操作失败时重试操作。还有另一种方法可以做到这一点。 def a(): try: print() except Exception as e: print(e) a()
【解决方案2】:

我自己没有遇到过这个问题,但Selenium documentation lists 是常见的例外。所以也许你可以试试:

from selenium.common.exceptions import NoSuchElementException

【讨论】:

  • 代码没有中断,正在循环运行。它不应该打破吗?
  • 嗯,看起来您在异常处理程序中使用了pass 关键字,这意味着循环将继续执行,直到不再引发异常。也许这意味着您的代码在 try 块中找不到它需要的元素?你用的是什么IDE?如果您使用 spyder,您可以设置断点并单步执行代码以查看是否到达断线。我希望这会有所帮助!
  • Spyder。我什至引入了 sleep 来加载它。但它仍然会在最终关闭之前加载多个实例
  • 我认为这行:xpath_string = '/html/body/div[1]/div/div/div[1]/div/div[2]/div/div/div[6]/div/div/section/div/ul/li[2]/a/span' 没有按您预期的方式工作?尝试设置断点并单步执行代码。如果它继续循环多次并不断引发错误,那么它永远无法找到该元素。尝试这种方法,同时在浏览器的开发控制台中直观地引用您正在抓取的 html。如果您可以确认您需要的元素在那里,但此行仍然抛出错误,那么您将需要更改 xPath
猜你喜欢
  • 2012-04-14
  • 2023-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
相关资源
最近更新 更多