TypeError: объект NoneType недопустим при вызове execute_script () для Chrome Download Manager через Selenium - PullRequest
1 голос
/ 28 марта 2019

Я использовал эту функцию https://stackoverflow.com/a/48267887/11220889 для ожидания завершения загрузки и возврата пути к файлу после завершения.И до сих пор она прекрасно работала.

Функция

def every_downloads_chrome(driver):
    if not driver.current_url.startswith("chrome://downloads"):
        driver.get("chrome://downloads/")
    return driver.execute_script('''
        var items = downloads.Manager.get().items_;
        if (items.every(e => e.state === "COMPLETE"))
            return items.map(e => e.file_url);
        ''')

Как она называется

paths = WebDriverWait(driver, 120, 1).until(every_downloads_chrome)

Ошибка, которую я получаю

TypeError: 'NoneType' object is not subscriptable

Итак, из того, что я могу собрать, что-то изменилось, что стало причиной того, что функция не возвращала путь.Я полагаю, что это связано с изменением в Chrome или, более точно, в драйвере Chrome.У меня есть две причины для такого предположения:

1) У меня была эта функция в другом коде, который использовала моя коллега, и она позвонила мне, сказав, что вчера она выдавала эту ошибку.

2) Ни один код не изменился, поэтому изменение должно быть в chrome

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

РЕДАКТИРОВАТЬ: Версии-

Name: selenium
Version: 3.141.0

Name: Chrome Browser
Version: 73.0.3683.86

Name: Chrome Driver
Version: 2.43.600210

Name: System
Version: Windows 10 Pro x64

1 Ответ

1 голос
/ 28 марта 2019

Согласно сообщению об ошибке:

TypeError: 'NoneType' object is not subscriptable

Ваша основная проблема - несовместимость между версиями двоичных файлов, которые вы используете, следующим образом:

  • Вы используете chromedriver = 2,43
  • Примечания к выпуску chromedriver = 2,43 четко упоминает следующее:

Поддержка Chrome v69-71

  • Вы используете хром = 73,0
  • Примечания к выпуску ChromeDriver v2.46 четко упоминает следующее:

Поддержка Chrome v71-73

Таким образом, существует явное несоответствие между ChromeDriver v2.43 и Chrome Browser v73.0


Решение

  • Обновление ChromeDriver до текущей ChromeDriver v2.46 уровень.
  • Keep Chrome версия на уровне Chrome v73 . ( в соответствии с примечаниями к выпуску ChromeDriver v2.46 )
  • Очистите ваше Рабочее пространство проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • Если ваша базовая версия Web Client устарела, удалите ее и установите последнюю версию GA и выпущенную версию Web Client .
  • Выполните ваши @Test.
  • Всегда вызывайте driver.quit() в методе tearDown(){} для закрытия и уничтожения WebDriver и Веб-клиента экземпляров изящно.

Обновление

В настоящее время GAed Chrome v73 имеет некоторые проблемы, и вы можете понизить рейтинг до Chrome v72 . Вы можете найти пару соответствующих обсуждений в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...