Selenium или что другое?

всем привет, у меня стоит задача написать программу которая будет работать по несколько дней (недель) не отключаясь, нужно производить действия на одном сайте, requests или aiohttp для этого не подходят точно. нужно использовать selenium, но у него проблема с долгой работой или я это не очень правильно делаю (запускаю while true цикл и в нём делаю нужные мне действия), он выдает ошибки причём которые возникают через определённое варения работы. что лучше? знаю про phantom js и pyqt + webkit
пишу на python
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
3vi1_0n3
@3vi1_0n3
Из своего опыта с селениумом подозреваю, что в какие-то моменты элемент DOM может там уже не быть, когда вы пытаетесь его использовать, это одна из проблем, которые вылезают в селениуме на динамических приложениях, в частности на многих SPA на реакте.

Это из-за того, что визуально сам веб-элемент как бы не изменился, но на самом деле это уже вообще не тот элемент, даже если локатор совпадает. При поиске элемента по локатору возвращается element id (выглядит как UUID) этого элемента, с которым и происходят операции. Если дерево было перестроено после получения element id, то возникает ошибка поиска этого элемента, чтобы осуществить над ним действие.

Обычно может помочь получать элемент по локатору прямо перед его использованием (типа find_element().click()), либо ждать, пока обновления закончатся и как-то это определять. Сам selenium не ждет, пока обновление всего DOM закончится окончательно (хотя у него и есть таймаут поиска), так что над этим придется поэкспериментировать, чтобы определять, что в момент действия вероятность обновления либо нулевая, либо низкая. Его, собственно, многие за это и не любят, хотя при правильном понимании и приготовлении (что обычно занимает время), он может быть очень стабильным.

Собственно таймаут поиска элемента не всегда работает, когда изменение страницы происходит после того, как элемент найден, но до того, как с ним что-то пытаются сделать.

Такие вот дела. Я бы попробовал посмотреть, с чем возникает ошибка и, если это по причине того, что элемент не найден, попытался пере-найти этот элемент и потом выполнить действие.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы