Оператор Selenium Python If-else

#python #selenium #if-statement

Вопрос:

у меня есть небольшой скрипт на python, который нажимает несколько разных кнопок после 1-секундного перерыва (1,2,3 и 4). Все работает нормально, но иногда на этом веб-сайте появляется только кнопка 4, а 1,2,3-нет, и мой скрипт не может справиться с этой кнопкой, 1,2 и 3 отсутствуют 🙁 Я пытался сделать заявление «если бы еще», но оно не работает. Я также попробовал попробовать: и, наконец,: решение. Может быть, у вас есть подсказка для меня, я был бы очень рад ^^


«Без оператора if-else, когда появляется каждая кнопка

 "Button 1 appears  wait.until(EC.element_to_be_clickable((By.XPATH, "//uni-view[@class='btn']"))).click()  time.sleep(1) "Button 2 appears  wait.until(EC.element_to_be_clickable((By.XPATH, "//uni-view[@class='btn']"))).click()  time.sleep(1) "Button 3 appears  wait.until(EC.element_to_be_clickable((By.XPATH, "//uni-view[@class='btn active']"))).click()  time.sleep(1) "Button 4 appears  wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/uni-app/uni-page/uni-page-wrapper/uni-page-body/uni-view/uni-movable-area/uni-scroll-view/div/div/div/uni-view/uni-view[3]/uni-view[2]/uni-view/uni-view/img[2]"))).click()  time.sleep(1)   

«С помощью оператора if-else, когда появляется только кнопка 4. Если появится кнопка 1, перейдите к 2, 3 и 4. Если кнопка 1 не отображается, просто нажмите кнопку 4 (так что моя идея ^^) Но это не получается

 if driver.find_element_by_xpath("//uni-view[@class='btn']"):  wait.until(EC.element_to_be_clickable((By.XPATH, "//uni-view[@class='btn']"))).click()  time.sleep(1)  wait.until(EC.element_to_be_clickable((By.XPATH, "//uni-view[@class='btn']"))).click()  time.sleep(1)  wait.until(EC.element_to_be_clickable((By.XPATH, "//uni-view[@class='btn active']"))).click()  time.sleep(1)  wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/uni-app/uni-page/uni-page-wrapper/uni-page-body/uni-view/uni-movable-area/uni-scroll-view/div/div/div/uni-view/uni-view[3]/uni-view[2]/uni-view/uni-view/img[2]"))).click()  time.sleep(1)  else:  wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/uni-app/uni-page/uni-page-wrapper/uni-page-body/uni-view/uni-movable-area/uni-scroll-view/div/div/div/uni-view/uni-view[3]/uni-view[2]/uni-view/uni-view/img[2]"))).click()  time.sleep(1)  

Ответ №1:

Пара вещей, вместо использования оператора If-else, используйте оператор Try-except. Вам также не следует использовать команду «ждать.пока», если вы не уверены, появится элемент или нет. Если он не появится, то будет ждать бесконечно долго. Смотрите ниже код для изменений, возможно, вам потребуется скорректировать его в соответствии с вашей конкретной ситуацией:

 try:  driver.find_element_by_xpath("//uni-view[@class='btn']").click() #button_one  time.sleep(1)  driver.find_element_by_xpath("//uni-view[@class='btn']").click() #button_two  time.sleep(1)  driver.find_element_by_xpath("//uni-view[@class='btn active']").click() #button_three  time.sleep(1)  driver.find_element_by_xpath("/html/body/uni-app/uni-page/uni-page-wrapper/uni-page-body/uni-view/uni-movable-area/uni-scroll-view/div/div/div/uni-view/uni-view[3]/uni-view[2]/uni-view/uni-view/img[2]").click() #button_four  time.sleep(1) except:  driver.find_element_by_xpath("/html/body/uni-app/uni-page/uni-page-wrapper/uni-page-body/uni-view/uni-movable-area/uni-scroll-view/div/div/div/uni-view/uni-view[3]/uni-view[2]/uni-view/uni-view/img[2]").click() #button_four  time.sleep(1)  

Чтобы выразить это словами: водитель пытается найти button_one, если он может, то он продолжает нажимать button_two, button_three, затем button_four. Но если драйвер не может найти button_one, то он нажимает только button_four.

Комментарии:

1. Вы решили проблему 🙂 Я попробовал, и это работает. Большое вам спасибо, вы сделали мой день незабываемым

2. @MrNobody Рад, что смог помочь! Не стесняйтесь ставить галочку рядом с моим ответом, если он правильный. Спасибо!