Контекст просмотра был отброшен с помощью GeckoDriver Firefox через Selenium
Я не внес никаких изменений в свою программу python selenium, и она работала нормально 3 дня назад. Теперь, когда я пытаюсь использовать его, я получаю:
Контекст просмотра был отброшен Не удалось расшифровать ответ от марионетки
Есть идеи, что могло вызвать это за пределами кода? (так как никаких изменений не было сделано)
Я использую Firefox и Geckodriver. После того, как я получил эти ошибки, я обновил Firefox, Geckodriver и Selen, но это не помогло.
4 ответа
Это сообщение об ошибке...
Browsing context has been discarded
.
Failed to decode response from marionette
... подразумевает, что связь между GeckoDriver и Marionette была нарушена.
Еще немного информации о бинарных версиях:
- Selenium Сервер / Клиент
- GeckoDriver
- Fire Fox
Кроме того, ваш блок кода и трассировка стека ошибок дали бы нам некоторые подсказки о том, что случилось. Однако эта проблема может возникнуть из-за следующих факторов:
- В зависимости от зависания, когда запрос навигации удаляет текущий контекст просмотра, если вы использовали
driver.navigate().back();
когда фокус Selenium был в пределах<iframe>
эта ошибка наблюдается. - Согласно Crash во время выполнения команды приводит к "Внутренняя ошибка сервера: не удалось декодировать ответ от марионетки", эта проблема также может возникать из-за проверок ctypes для разыменования нулевого указателя.
- Вы можете найти тестовый пример Selenium здесь. Возможно, вместо паники, было бы лучше справиться с этим более изящно, очистив любое состояние и вернув geckodriver, чтобы снова принимать новые соединения.
- В соответствии с Не удалось декодировать ответ от марионетки - Ошибка при открытии Webdriver с использованием Python, эта проблема также может возникнуть, если вы не используете совместимую версию двоичных файлов.
Таблица совместимости браузеров GeckoDriver, Selenium и Firefox
В Ubuntu 22.10 с использованием (подходящих, а не snap) Firefox и Selenium в Python я также получил эту ошибку после:
driver.switch_to.alert.accept()
Решение для меня состояло в том, чтобы вернуться к контексту с помощью:
def upload_file(driver, filepath):
"""Uploads a Ublock Origin backup (template) .txt file into the Ublock
Origin extension."""
driver.find_element("id", "restoreFilePicker").send_keys(filepath)
time.sleep(1)
driver.switch_to.alert.accept()
time.sleep(1)
# Switch back to first tab (and reload/restore it).
new_window = driver.window_handles[0]
driver.switch_to.window(new_window)
Этот ответ был дан в этом вопросе .
Я столкнулся с той же ошибкой на определенном сайте после успешного входа в систему и когда меня перенаправили на следующую страницу.
При проверке источника нового кода страницы в моем браузере Firefox я заметил некоторые детали плохого формата/качества HTML, которые исчезли после ручного обновления. (Я подозреваю, что это связано с отсутствием качества этого сайта в частности).
Чтобы исправить это, я начал каждый следующий шаг на новой странице с обновления на моем диске:
def my_next_step(driver):
driver.refresh()
time.sleep(10)
element=driver.switch_to_frame('iframe')
.......
Это помогло мне решить проблемы с качеством сайта.