Selenium2+python自动化57-捕获异常(NoSuchElementException)

简介: 前言 在定位元素的时候,经常会遇到各种异常,为什么会发生这些异常,遇到异常又该如何处理呢? 本篇通过学习selenium的exceptions模块,了解异常发生的原因。 selenium+python高级教程》已出书:selenium webdriver基于Python源码案例 (购买此书送对应PDF版本)   一、发生异常 1.

前言

在定位元素的时候,经常会遇到各种异常,为什么会发生这些异常,遇到异常又该如何处理呢?

本篇通过学习selenium的exceptions模块,了解异常发生的原因。

selenium+python高级教程》已出书:selenium webdriver基于Python源码案例

(购买此书送对应PDF版本)

 

一、发生异常

1.打开博客首页,定位“新随笔”元素,此元素id="blog_nav_newpost"

2.为了故意让它定位失败,我在元素属性后面加上xx

3.运行失败后如下图所示,程序在查找元素的这一行发生了中断,不会继续执行click事件了

 

二、捕获异常

1.为了让程序继续执行,我们可以用try...except...捕获异常。捕获异常后可以打印出异常原因,这样以便于分析异常原因

2.从如下异常内容可以看出,发生异常原因是:NoSuchElementException

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"blog_nav_newpostxx"}

3.从selenium.common.exceptions 导入 NoSuchElementException类

 

三、参考代码:

# coding:utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Firefox()
driver.get("http://www.cnblogs.com/yoyoketang/")
# 定位首页"新随笔"
try:
    element = driver.find_element("id", "blog_nav_newpostxx")
except NoSuchElementException as msg:
    print u"查找元素异常%s"%msg

# 点击该元素   # 交流QQ群:232607095
else:
    element.click()

 

四、selenium常见异常

1.NoSuchElementException:没有找到元素

2.NoSuchFrameException:没有找到iframe

3.NoSuchWindowException:没找到窗口句柄handle

4.NoSuchAttributeException:属性错误

5.NoAlertPresentException:没找到alert弹出框

6.lementNotVisibleException:元素不可见

7.ElementNotSelectableException:元素没有被选中

8.TimeoutException:查找元素超时

 

五、其它异常与源码

1.在Lib目录下:\Lib\site-packages\selenium\common有兴趣的可以看看

# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The SFC licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

"""
Exceptions that may happen in all the webdriver code.
"""


class WebDriverException(Exception):
    """
    Base webdriver exception.
    """

    def __init__(self, msg=None, screen=None, stacktrace=None):
        self.msg = msg
        self.screen = screen
        self.stacktrace = stacktrace

    def __str__(self):
        exception_msg = "Message: %s\n" % self.msg
        if self.screen is not None:
            exception_msg += "Screenshot: available via screen\n"
        if self.stacktrace is not None:
            stacktrace = "\n".join(self.stacktrace)
            exception_msg += "Stacktrace:\n%s" % stacktrace
        return exception_msg


class ErrorInResponseException(WebDriverException):
    """
    Thrown when an error has occurred on the server side.

    This may happen when communicating with the firefox extension
    or the remote driver server.
    """
    def __init__(self, response, msg):
        WebDriverException.__init__(self, msg)
        self.response = response


class InvalidSwitchToTargetException(WebDriverException):
    """
    Thrown when frame or window target to be switched doesn't exist.
    """
    pass


class NoSuchFrameException(InvalidSwitchToTargetException):
    """
    Thrown when frame target to be switched doesn't exist.
    """
    pass


class NoSuchWindowException(InvalidSwitchToTargetException):
    """
    Thrown when window target to be switched doesn't exist.

    To find the current set of active window handles, you can get a list
    of the active window handles in the following way::

        print driver.window_handles

    """
    pass


class NoSuchElementException(WebDriverException):
    """
    Thrown when element could not be found.

    If you encounter this exception, you may want to check the following:
        * Check your selector used in your find_by...
        * Element may not yet be on the screen at the time of the find operation,
        (webpage is still loading) see selenium.webdriver.support.wait.WebDriverWait()
        for how to write a wait wrapper to wait for an element to appear.
    """
    pass


class NoSuchAttributeException(WebDriverException):
    """
    Thrown when the attribute of element could not be found.

    You may want to check if the attribute exists in the particular browser you are
    testing against.  Some browsers may have different property names for the same
    property.  (IE8's .innerText vs. Firefox .textContent)
    """
    pass


class StaleElementReferenceException(WebDriverException):
    """
    Thrown when a reference to an element is now "stale".

    Stale means the element no longer appears on the DOM of the page.


    Possible causes of StaleElementReferenceException include, but not limited to:
        * You are no longer on the same page, or the page may have refreshed since the element
        was located.
        * The element may have been removed and re-added to the screen, since it was located.
        Such as an element being relocated.
        This can happen typically with a javascript framework when values are updated and the
        node is rebuilt.
        * Element may have been inside an iframe or another context which was refreshed.
    """
    pass


class InvalidElementStateException(WebDriverException):
    """
    """
    pass


class UnexpectedAlertPresentException(WebDriverException):
    """
    Thrown when an unexpected alert is appeared.

    Usually raised when when an expected modal is blocking webdriver form executing any
    more commands.
    """
    def __init__(self, msg=None, screen=None, stacktrace=None, alert_text=None):
        super(UnexpectedAlertPresentException, self).__init__(msg, screen, stacktrace)
        self.alert_text = alert_text

    def __str__(self):
        return "Alert Text: %s\n%s" % (self.alert_text, super(UnexpectedAlertPresentException, self).__str__())


class NoAlertPresentException(WebDriverException):
    """
    Thrown when switching to no presented alert.

    This can be caused by calling an operation on the Alert() class when an alert is
    not yet on the screen.
    """
    pass


class ElementNotVisibleException(InvalidElementStateException):
    """
    Thrown when an element is present on the DOM, but
    it is not visible, and so is not able to be interacted with.

    Most commonly encountered when trying to click or read text
    of an element that is hidden from view.
    """
    pass


class ElementNotSelectableException(InvalidElementStateException):
    """
    Thrown when trying to select an unselectable element.

    For example, selecting a 'script' element.
    """
    pass


class InvalidCookieDomainException(WebDriverException):
    """
    Thrown when attempting to add a cookie under a different domain
    than the current URL.
    """
    pass


class UnableToSetCookieException(WebDriverException):
    """
    Thrown when a driver fails to set a cookie.
    """
    pass


class RemoteDriverServerException(WebDriverException):
    """
    """
    pass


class TimeoutException(WebDriverException):
    """
    Thrown when a command does not complete in enough time.
    """
    pass


class MoveTargetOutOfBoundsException(WebDriverException):
    """
    Thrown when the target provided to the `ActionsChains` move()
    method is invalid, i.e. out of document.
    """
    pass


class UnexpectedTagNameException(WebDriverException):
    """
    Thrown when a support class did not get an expected web element.
    """
    pass


class InvalidSelectorException(NoSuchElementException):
    """
    Thrown when the selector which is used to find an element does not return
    a WebElement. Currently this only happens when the selector is an xpath
    expression and it is either syntactically invalid (i.e. it is not a
    xpath expression) or the expression does not select WebElements
    (e.g. "count(//input)").
    """
    pass


class ImeNotAvailableException(WebDriverException):
    """
    Thrown when IME support is not available. This exception is thrown for every IME-related
    method call if IME support is not available on the machine.
    """
    pass


class ImeActivationFailedException(WebDriverException):
    """
    Thrown when activating an IME engine has failed.
    """
    pass

学习过程中有遇到疑问的,可以加selenium(python+java) QQ群交流:646645429

觉得对你有帮助,就在右下角点个赞吧,感谢支持!

 

相关文章
|
5天前
|
Python
Python办公自动化:删除任意页数pdf页面
Python办公自动化:删除任意页数pdf页面
15 1
Python办公自动化:删除任意页数pdf页面
|
5天前
|
Python
Python办公自动化:xlwings对Excel进行分类汇总
Python办公自动化:xlwings对Excel进行分类汇总
20 1
|
5天前
|
Python
Python自动化:xlwings合并Excel
Python自动化:xlwings合并Excel
16 0
|
3天前
|
机器学习/深度学习 人工智能 运维
自动化运维的魔法:如何利用Python脚本提升工作效率
【9月更文挑战第29天】在数字时代的浪潮中,IT运维人员面临着前所未有的挑战和机遇。本文将通过深入浅出的方式,介绍自动化运维的基本概念、核心价值以及使用Python脚本实现自动化任务的方法。我们将从实际案例出发,探讨如何利用Python简化日常的系统管理任务,提高运维效率,并展望自动化运维的未来趋势。无论你是初学者还是有经验的运维专家,这篇文章都将为你开启一扇通往高效工作方式的大门。
9 2
|
6天前
|
存储 BI 数据库
使用 Python 实现自动化办公
使用 Python 实现自动化办公
15 4
|
5天前
|
数据安全/隐私保护 Python
Python办公自动化:给pdf加水印
Python办公自动化:给pdf加水印
|
5天前
|
Python
Python办公自动化:提取pdf文件中的图片
Python办公自动化:提取pdf文件中的图片
10 0
|
5天前
|
Python
Python办公自动化:xlwings对Excel进行列拆分
Python办公自动化:xlwings对Excel进行列拆分
14 0
|
5天前
|
Python
Python办公自动化:xlwings拆分Excel
Python办公自动化:xlwings拆分Excel
13 0
|
5天前
|
Python
Python自动化:xlwings替换Excel中内容
Python自动化:xlwings替换Excel中内容
16 0
下一篇
无影云桌面