#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 Рад, что смог помочь! Не стесняйтесь ставить галочку рядом с моим ответом, если он правильный. Спасибо!