В чем проблема в этом коде на Python?

Как изменить код, чтобы он продолжал искать изображения, если первое не было найдено, и кликал по другим изображениям? Получается, что после выполнения всех действий поиск прекращается. Как можно улучшить код, чтобы он продолжал искать изображения?
  • 15 апреля 2024 г. 18:30
Ответы на вопрос 2
Проблема в данном коде заключается в том, что после выполнения поиска первого изображения и клика по нему, цикл завершается, и поиск не продолжается для остальных изображений.

Для того чтобы улучшить код и продолжить поиск изображений после клика на каждом из них, можно воспользоваться конструкцией try-except. В случае, если изображение не было найдено на странице, код будет перехватывать исключение и продолжать выполнение цикла.

Пример исправленного кода:

```python
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome()
driver.get("http://www.example.com")

images = driver.find_elements_by_tag_name("img")

for image in images:
    try:
        image.click()
    except NoSuchElementException:
        continue
```

Таким образом, код будет продолжать поиск и кликать по изображениям на странице, даже если какое-то изображение не будет найдено.
Потому что ты неверно понимаешь логику своей программы. <br/> Если у тебя не найдётся 1.png, вылетит исключение, и даже не будут попытки искать дальнейшие картинки  - управление перейдёт в except, а затем на новую итерацию while True, где снова будет попытка искать 1.png. <br/> <br/> Есть и ещё ряд замечаний. <br/> 1. На кой баклажан ты загружаешь 1.png-5.png на каждой итерации цикла? Только зря программу замедляешь. Если ты не хочешь обновлять эти файлы без перезапуска программы, то загрузи их один раз на старте. <br/> 2. То же самое со скриншотом. Ты делаешь новый скриншот перед каждым следующим файлом - это точно хорошая идея? Вроде как надо поискать изображения на скриншоте, и только потом делать следующий. <br/> 3. Почему ты используешь И locateOnScreen(), И matchTemplate()? Выбери ту функцию, которая лучше работает, и используй только её. <br/> 4. Ты нифига не отслеживаешь, а что за исключение-то вылетает? Может, у тебя программа в принципе кривая, и дело не в том, что изображение не найдено. Для locateOnScreen() лови конкретно pyautogui.ImageNotFoundException. matchTemplate() исключений не кидает, так что проверяй, что locations не пуст, а имеет хотя бы один элемент. А остальные эксепшены не лови, или хотя бы выводи инфу о них в журнал работы программы.
Похожие вопросы