Как решить проблему с ошибкой, возникающей при нажатии кнопки «Next» в Instagram с использованием Selenium?

Я пытаюсь создать пост в Instagram с помощью Selenium, но при нажатии на кнопку "Next" (загрузка фото проходит успешно) появляется ошибка: "Something went wrong. Try again". Вот мой код: <br/> <br/> <pre><code class="python">def post_inst(message, usrname, file_path):
  driver.get("https://www.instagram.com/")
  load_cookies(driver, "cookies_inst.pkl")
  driver.refresh()
  time.sleep(5)
  # Проверяем, выполнен ли вход
  if "login" in driver.current_url:
    raise Exception("Не выполнен вход в аккаунт Instagram")
  # Нажимаем на кнопку "Создать пост"
  post_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "(//div[@class='x1n2onr6'])[9]")))
  post_button.click()
  # Загружаем изображение
  time.sleep(10)
  file_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "._ac69")))
  file_input.send_keys(file_path)
  time.sleep(5)
  print(1)
  # Переходим к следующему шагу
  # next_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.xjyslct")))
  time.sleep(10)
  driver.save_screenshot("picture.png")
  next_button = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.xjyslct")))
  next_button.click()
  time.sleep(10)
  driver.save_screenshot("next.png")
  print(2)
  # Нажимаем "Next" второй раз
  next_button = WebDriverWait(driver, 200).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.xjyslct")))
  time.sleep(2)
  next_button.click()
  driver.save_screenshot("next2.png")
  print(3)
  # Вводим текст
  text_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[contains(@aria-label, 'Write a caption...')]")))
  • 31 января 2025 г. 11:54
Ответы на вопрос 3
Ошибка "Something went wrong. Try again", возникающая при попытке нажать на кнопку "Next" в Instagram через Selenium, может быть вызвана несколькими факторами. Попробуем рассмотреть потенциальные причины и возможные решения:

1. **Интервалы ожидания**: Иногда элемент может не успеть появиться или стать кликабельным. Убедитесь, что вы используете достаточные интервалы ожидания между действиями, чтобы дать Instagram время на обработку. Попробуйте увеличить значение `time.sleep`.

2. **Обновление DOM**: После загрузки фотографии и нажатия кнопки "Next" возможно, что Instagram обновляет страницу, и из-за этого Selenium не может кликнуть на элемент. Попробуйте использовать `WebDriverWait` для ожидания изменения состояния страницы.

3. **Мобильная версия**: Некоторые элементы могут загружаться в мобильной версии Instagram. Убедитесь, что ваш браузер настроен на мобильный режим. Вы можете использовать следующее:

   ```python
   from selenium import webdriver

   options = webdriver.ChromeOptions()
   options.add_argument("--window-size=375,812")  # Размер экрана мобильного устройства
   options.add_argument("--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1")
   driver = webdriver.Chrome(options=options)
   ```

4. **Использование XPaths и CSS-селекторов**: Проверьте, правильны ли использованные вами селекторы для кнопок. Иногда Instagram может менять свои селекторы. Обязательно проверьте актуальность XPaths и CSS-селекторов.

5. **Проблемы с кэшем или куки**: Используйте свежую сессию браузера. Возможно, нарушения из-за устаревших куки могут вызвать проблемы. Попробуйте очистить кэш или запустить сессию без кук.

6. **Ошибка с загрузкой**: Убедитесь, что изображение корректно загружается, и после этого элемент "Next" становится активным. Возможно, стоит добавить проверки, чтобы удостовериться, что загрузка прошла удачно.

7. **Сбросить состояние браузера**: Перезапуск браузера или закрытие текущей вкладки и открытие новой может помочь, если состояние браузера могло повредиться.

Вы можете улучшить свой код следующим образом:

```python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ... ваш код выше ...

# Переходим к следующему шагу
driver.save_screenshot("upload_complete.png")  # Проверьте, что изображение успешно загружено

# Теперь ищем кнопку "Next"
try:
    next_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.xjyslct")))
    next_button.click()
except Exception as e:
    print("Ошибка при нажатии на кнопку 'Next':", e)

time.sleep(5)  # Подождите для загрузки следующей страницы обязательно перед действиями

# Нажимаем "Next" второй раз
try:
    next_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.xjyslct")))
    next_button.click()
except Exception as e:
    print("Ошибка при втором нажатии на кнопку 'Next':", e)

# ... ваш код для ввода текста ...
```

Попробуйте эти рекомендации и проверьте наличие ошибок. Надеюсь, это поможет вам решить проблему!
Дебаг, дебаг и ещё раз дебаг
Разделите эту огромную простыню на небольшие функции, которые будут каждая делать только одно. Признак, по которому можно делить - «и». Если функция делает то и это, выделяем функции «делать то» и «делать это». 
Основная функция вызывает остальные в нужном порядке.
Так отладить всё это будет значительно проще.

Кстати, модный deekpeek прекрасно умеет порезать такую портянку кода на ленточки, пробуйте.
Похожие вопросы