当前位置 博文首页 > Python Selenium异常处理的实例分析

    Python Selenium异常处理的实例分析

    作者:小妮浅浅 时间:2021-07-19 18:51

    1、说明

    在使用selenium时,不可避免的会遇到一些异常情况,比如超时、没有找到节点的错误等等。一旦出现这样的错误,程序就不能再运行了。这里我们可以使用tryexcept语句来捕捉异常。

    2、实例

    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException, NoSuchElementException
    browser = webdriver.Chrome()
    try:
      browser.get('https://www.baidu.com')
    except TimeoutException:
      print('超时')
    try:
      browser.find_element_by_id('aa')
    except NoSuchElementException:
      print('未找到节点')
    finally:
    browser.close()

    关于异常处理的实例扩展:

    我是Python的新手,我正在尝试编写一个使用硒登录到Web应用程序并打印一些信息的nagios脚本。到目前为止,该脚本可以按预期工作,但是如果它无法检索该网站,我希望它向系统发出警报。这是我所拥有的

    #!/usr/bin/env python
    
    import sys
    from selenium import webdriver
    
    url = '<main web site>'
    systemInformation = '<sys information site>'
    logout = '<log out link>'
    browser = webdriver.PhantomJS('<path to phantomjs for headless operation>')
    login_username = '<username>'
    login_password = '<password>'
    
    try:
      browser.get(url)
      username = browser.find_element_by_name("username")
      password = browser.find_element_by_name("password")
    
      username.send_keys(login_username)
      password.send_keys(login_password)
    
      link = browser.find_element_by_name('loginbutton')
      link.click()
    
      browser.get(systemInformation)
    
      print "OK: Web Application is Running"
      for element in browser.find_elements_by_name('SystemReportsForm'):
        print element.text
    
      browser.get(logout)
      browser.quit()
      sys.exit(0)
    except:
      print "WARNING: Web Application is Down!"
      sys.exit(2)

    我希望如果第一部分失败,那么它将转到except部分,但是即使有出口,脚本也会打印出try和except。我确定这很简单,我很想念。

    这就是我最终解决此问题的方式,感谢您的帮助

    #!/usr/bin/env python
    
    import sys, urllib2
    from selenium import webdriver
    
    url = '<log in url>'
    systemInformation = '<sys info url>'
    logout = '<logout url>'
    browser = webdriver.PhantomJS('<phantomjs location for headless browser>')
    login_username = '<user>'
    login_password = '<password>'
    
    def login(login_url,status_url):
      browser.get(login_url)
      username = browser.find_element_by_name("username")
      password = browser.find_element_by_name("password")
    
      username.send_keys(login_username)
      password.send_keys(login_password)
    
      link = browser.find_element_by_name('loginbutton')
      link.click()
    
      browser.get(status_url)
    
      if browser.title == 'Log In':
        print "WARNING: Site up but Failed to login!"
        browser.get(logout)
        browser.quit()
        sys.exit(1)
      else:
        print "OK: Everything Looks Good"
        for element in browser.find_elements_by_name('SystemReportsForm'):
          print element.text
    
        browser.get(logout)
        browser.quit()
        sys.exit(0)
    
    req = urllib2.Request(url)
    
    try:
      urllib2.urlopen(req)
      login(url,systemInformation)
    except urllib2.HTTPError as e:
      print('CRITICAL: Site Appears to be Down!')
      browser.get(logout)
      browser.quit()
      sys.exit(2)

    解决方案

    sys.exit([status])引发SystemExit(status)异常,这就是执行except子句的原因

    通过提高SystemExit(status)退出解释器。如果省略状态或无,则默认为零(即成功)。如果状态为整数,则将其用作系统退出状态。如果是另一种对象,则将其打印出来,并且系统退出状态将为1(即失败)。

    删除sys.exit(0)内部try

    jsjbwy
    下一篇:没有了