Как перевести XPath в необязательный режим - PullRequest
0 голосов
/ 03 марта 2019

Этот XPath может быть доступен когда-нибудь, а иногда нет.

Если отклонение истинно, тогда я использую оператор if:

from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.firefox.options import Options
import time

import bs4
import requests
url="abc"

options = Options()
options.set_preference("dom.webnotifications.enabled", False)

driver=webdriver.Firefox(executable_path="C:\driver\geckodriver.exe",options=options)
driver.get(url)
driver.maximize_window()

reject = driver.find_element_by_xpath("/html/body/div/div/div/main/div/section/div[2]/div[2]/div/ul/a[1]/div[3]/label")
if reject:
    driver.find_element_by_xpath("/html/body/div[1]/div/div/main/div/section/div[2]/div[2]/div/ul/a[1]/div[1]/span/i").click()
    time.sleep(1)
    driver.find_element_by_xpath("/html/body/div[1]/div/div/main/div/section/div[2]/div[2]/div/ul/a[1]/div[1]/div/ul/li[2]").click()
    time.sleep(2)
    driver.find_element_by_xpath("/html/body/div[3]/div/div/div[3]/button[1]").click()
    time.sleep(5)

# Above code blocking to run below code (if reject is None).

neighbourhood= Select(driver.find_element_by_name("Locality"))
neighbourhood.select_by_value("5001641")

Но проблема в том, что эта переменная отклонения XPathне существует, поэтому он показывает ошибку и блокировку под кодом.

, как сделать эту переменную отклонения необязательной, если доступен XPath, затем работать, если нет, оставить его и запустить под кодом.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019
Блок

try-кроме сделает свое дело.

try:
  reject = driver.find_element_by_xpath("/html/body/div/div/div/main/div/section/div[2]/div[2]/div/ul/a[1]/div[3]/label")
except:
  print("An exception occurred")

Всякий раз, когда xpath не найден, выполняется оператор print, и дальнейший код выполняется без ошибок, как раньше.

0 голосов
/ 03 марта 2019

Вы можете поймать исключение.Примерно так:

...
try:
    reject = driver.find_element_by_xpath("/html/body/div/div/div/main/div/section/div[2]/div[2]/div/ul/a[1]/div[3]/label")
except:
    print("No element found")

if reject:
...

Если вам это нужно чаще, вы можете создать для этого служебный метод.

def elementVisible(xpath):
    try:
        driver.find_element_by_xpath(xpath);
        return true;
    except:
        return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...