Добавьте более одного Python Selenium WebDriverWait исключение, чтобы загрузить элемент - PullRequest
0 голосов
/ 03 апреля 2020

Итак, у меня есть это в моем сценарии:

today = datetime.now()
today = today.strftime("%Y%m%d")
yesterday = datetime.now() - timedelta(days=1)
yesterday = yesterday.strftime("%Y%m%d")
y_yesterday = datetime.now() - timedelta(days=2)
y_yesterday = y_yesterday.strftime("%Y%m%d")
y2_yesterday = datetime.now() - timedelta(days=3)
y2_yesterday = y2_yesterday.strftime("%Y%m%d")
y3_yesterday = datetime.now() - timedelta(days=4)
y3_yesterday = y3_yesterday.strftime("%Y%m%d")
exp = "//*[@title='Some_excel_to_download_"+today+".xls']"
exp_y = "//*[@title='Some_excel_to_download_"+yesterday+".xls']"
exp_y2 = "//*[@title='Some_excel_to_download_"+y_yesterday+".xls']"
exp_y3 = "//*[@title='Some_excel_to_download_"+y2_yesterday+".xls']"

По сути, я хочу скачать файл xls с веб-сайта. Я хочу автоматизировать этот процесс с помощью планировщика crontab. Проблема в том, что файл, который я хочу загрузить, загружается в произвольные даты, а не в случайный час, но иногда они забывают загрузить его даже на 2 или 3 дня (автоматизация или ручная работа :))

На данный момент я использую это:

try:
    WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH,("%s" % exp)))).click()
    nazwa = 'Some_excel_to_download_'+today+'.xls'
    print(nazwa)
except TimeoutException:
    print("Today's file not found. Trying: " + exp_y)
    exp = "//*[@title='Some_excel_to_download_"+yesterday+".xls']"
    driver.find_element_by_xpath(exp_y).click()
    nazwa = 'Some_excel_to_download_'+yesterday+'.xls'
    print(nazwa)

, и это прекрасно работает, пока файл xls один день ... Я хочу знать, как добавить больше "кроме" операторов или (я думаю, это лучший вариант) что-то вроде заявления "если, элиф, еще", но я не уверен, как это сделать ... Может быть, вы могли бы помочь мне там, пожалуйста?

1 Ответ

0 голосов
/ 03 апреля 2020

Вы используете if condition, чтобы проверить length of the elements, если длина элементов count more than 0, затем щелкните по элементу else go следующий оператор и проверьте то же самое.

if len(driver.find_elements_by_xpath(exp))>0:
    driver.find_element_by_xpath(exp).click()
elif len(driver.find_elements_by_xpath(exp_y))>0:
    driver.find_element_by_xpath(exp_y).click()
elif len(driver.find_elements_by_xpath(exp_y2))>0:
    driver.find_element_by_xpath(exp_y2).click()
elif len(driver.find_elements_by_xpath(exp_y3))>0:
    driver.find_element_by_xpath(exp_y3).click()
else:
    print("No such elements")

Или вы можете использовать вложенный блок try..except, исключив исключение TimeoutException.

try:
    WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH,("%s" % exp)))).click()
    nazwa = 'Some_excel_to_download_'+today+'.xls'
    print(nazwa)
except:
    try:
       print("Today's file not found. Trying: " + exp_y)
       exp = "//*[@title='Some_excel_to_download_"+yesterday+".xls']"
       driver.find_element_by_xpath(exp_y).click()
       nazwa = 'Some_excel_to_download_'+yesterday+'.xls'
       print(nazwa)
    except:
        try:
           print("Today's file not found. Trying: " + exp_y2)
           exp = "//*[@title='Some_excel_to_download_" + y_yesterday + ".xls']"
           driver.find_element_by_xpath(exp_y2).click()
           nazwa = 'Some_excel_to_download_' + y_yesterday + '.xls'
           print(nazwa)
        except:
            print("Today's file not found. Trying: " + exp_y3)
            exp = "//*[@title='Some_excel_to_download_" + y2_yesterday + ".xls']"
            driver.find_element_by_xpath(exp_y3).click()
            nazwa = 'Some_excel_to_download_' + y2_yesterday + '.xls'
            print(nazwa)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...