Утверждение if / else зависит от существования xpath в Selenium - PullRequest
0 голосов
/ 26 января 2019

Мне неясно, как проверить наличие определенного xpath в операторе if / else (я также не уверен, что использование xpaths - лучший метод).

Я, по сути, хочу сделатьследующее (со списком URL-адресов, которые ссылаются на результаты поиска, которые могут существовать или не существовать / быть полными):

Для каждого URL-адреса:

  1. проверить, соответствует ли соответствующая страница результатов поискасуществует
  2. если она существует, проверьте, существует ли кнопка «Подробнее»
  3. , если она существует, проверьте, существует ли каждое поле данных / заполнено ли
  4. для всех пустых полей /разделы / страницы, заполните словарь пробелами

Я попытался сделать это, определив функцию для проверки существования xpath и используя ее во вложенных операторах if / else, но этовозвращая ошибки.

Текущий код выглядит следующим образом:

Функция для проверки существования xpath (логическое значение):

def hasxpath(xpath):
    try: 
        driver.find_element_by_xpath(xpath)
        return True
    except:
        return False

Код для работы через список URL-адресов:

for url in urls:
    driver = webdriver.Chrome(executable_path='/xxx')
    driver.get(url)

    # Check if search result page exists
    if hasxpath('xxx') == True:

        # If 'More Info' button exists, click it
        if hasxpath('xxx') == True:
            driver.find_element_by_xpath('xxx').click()

            # For each field, check if it exists and if so collect data
            # (example below for 'Name' field)
            if hasxpath('xxx') == True:
                name = driver.find_element_by_xpath('xxx')
                name = name.text
            else:
                name = ''
            driver.close()

        else:
            driver.close()

    else:
        driver.close()

По-прежнему не работает, когдаСтраница не существует (вместо выполнения driver.close () выдается ошибка).Есть ли это легко исправить?Или, может быть, даже лучший способ проверить эту информацию и найти данные (вместо использования xpaths)?

1 Ответ

0 голосов
/ 26 января 2019

Ваш код выглядит нормально. Я проверил, что и отсутствие Xpath закрывает браузер. Пожалуйста, запустите мой код и внесите необходимые изменения в ваш URL и xpath.

from selenium import webdriver
import time

def hasxpath(xpath):
    try:
        driver.find_element_by_xpath(xpath)
        return True
    except:
        return False

url_list = ["https://www.google.com/", "https://www.w3schools.com/","https://www.toolsqa.com/"]

for url in url_list:
    driver = webdriver.Chrome('D:/Java/TestChrome/lib/chromedriver.exe')
    print(url)
    driver.get(url)
    time.sleep(3)
    if hasxpath('xxx') == True:

        if hasxpath('xxx') == True:
            driver.find_element_by_xpath('xxx').click()

            # For each field, check if it exists and if so collect data
            # (example below for 'Name' field)
            if hasxpath('xxx') == True:
                name = driver.find_element_by_xpath('xxx')
                name = name.text
            else:
                name = ''
            driver.close()

        else:
            driver.close()

    else:
        driver.close()
        print('Closing Browser : ' + url)

print('pass')  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...