Как проверить, присутствует ли элемент в селене (python 2), не выбрасывая исключение NoSuchElement, если это не так? - PullRequest
0 голосов
/ 06 июня 2018

Я хотел бы проверить, присутствует ли элемент на тестируемой странице, но я не хочу, чтобы функция find_element_by_xpath генерировала исключение NoSuchElement, если его нет.Вот мой текущий код:

try:
    self.driver.find_element_by_xpath(an_element)

    try:
        self.driver.find_element_by_xpath(another_element)

    except NoSuchElementException:
        ... (If the first find_element works and second doesn't I want this code)

except NoSuchElementException:
    ... (If the first find_element fails I want this code)

По сути, он работает как оператор if else, поэтому я бы предпочел использовать оператор if else, чтобы найти другое исключение no this element в этих блоках кода.

Есть ли другой вариант, который не выдает исключение, если элемент отсутствует?

РЕДАКТИРОВАТЬ:

Полученные ответы отлично работают!Спасибо тем, кто ответил.Я также нашел другой способ, если вы читаете это с той же проблемой:

Когда вы используете find_element s _by_xpath (), он возвращает список найденных элементов.Если этот список имеет длину 0, то элемент отсутствует.Если длина 1 элемент присутствует.Не исключение.

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Код, который у вас есть, абсолютно верен для подобных вещей.В Python попытка / исключение является допустимой структурой управления для использования подобным образом и часто (почти всегда) более эффективна, чем использование блока if / else.Вы также можете упростить свой код, разделив его на различные функции, как показано в примере ниже (в ответ на редактирование).

class SomeClass(object):
    """Your class which is doing the scraping"""

    def find_element(self, xpath):
        """A handy function to try and find the element.

        Args:
            xpath (str): the xpath string you are trying to find

        Returns:
            List of elements
        """
        try:
            return self.driver.find_element_by_xpath(xpath)
        except NoSuchElementException:
            return []

    def find_buttons(self):
        """method to find your buttons

        Returns:
            list of buttons, or empty list if no buttons found
        """
        # define your queries
        xpaths = ['/some/query', '/some/other/query']

        # iterate through them
        for xpath in xpaths:
            buttons = self.find_element(xpath)
            if buttons:
                # until you are successful 
                return buttons

        # or return empty list if no buttons found
        return []
0 голосов
/ 06 июня 2018

Вы можете использовать следующий код:

if self.driver.find_elements_by_xpath(an_element):
    if self.driver.find_elements_by_xpath(another_element):
        # code for case both found
    else:
        # second not found
else:
    # first not found

Обратите внимание, что find_elements_by_xpath() возвращает вам список веб-элементов или пустой список.Не нужно обрабатывать NoSuchElementException

0 голосов
/ 06 июня 2018

Вы можете искать в page_source, где есть все html-теги и контент:

if '<button class="">' in self.driver.page_source:
    ... (do one thing)
else:
    ... (do another thing)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...