«Соединение прервано», ConnectionResetError (104, «Сброс соединения по одноранговой сети») с использованием Selenium с ChromeDriver и Chrome через Python.

1

Приведенный ниже код выполняется в цикле, где открываются 10-15 локальных файлов .html и изображение каждого из них сохраняется в формате .png.

  • Ubuntu Server 16.04
  • ChromeDriver 2.41.578700
  • Google Chrome 74.0.3729.108
  • селен 3.141.0
  • Python 3.6

Первые два файла открываются и изображение сохраняется, а остальные приводят к:

("Соединение прервано.", ConnectionResetError (104, "Сброс соединения по пиру")

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

def _save_image(html_file_path, png_file_path, h=850, w=833):
    try:
        from selenium import webdriver
        from selenium.webdriver.chrome.options import Options
    except Exception as ex:
        raise Exception("Saving the plot as a .PNG requires *selenium* package to be installed. Please install selenium using *pip install selenium*.")

    options = Options()
    options.add_argument('--headless')
    options.add_argument('disable-infobars')
    options.add_argument('--disable-extensions')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    #options.add_argument('--disable-gpu')

    if os.name == 'nt':
        chrome_driver_path = os.path.dirname(__file__)
        chrome_driver_path = chrome_driver_path[:-3] + "chromedriver.exe"
    elif os.name == 'posix':
        chrome_driver_path = "/usr/bin/chromedriver"
    else:
        raise Exception("OS could not be detected, thus selenium could not be initialised properly.")
    driver = webdriver.Chrome(chrome_driver_path, chrome_options=options)
    driver.set_window_size(w, h)
    driver.get("file://"+html_file_path)
    time.sleep(5)
    driver.save_screenshot(png_file_path + ".png")
    driver.quit()
    time.sleep(5)

Функция time.sleep(5) была добавлена для проверки того, произошла ли ошибка из-за долгой загрузки страницы, увеличила ее до 30 секунд и результат был таким же. Операторы импорта находятся в функции из-за технических требований, которые будут отсортированы на более позднем этапе.

Теги:
selenium
selenium-chromedriver
google-chrome

2 ответа

3

Это сообщение об ошибке...

('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

... подразумевает, что ChromeDriver не смог связаться с WebBrowser, то есть сеансом браузера Chrome.

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

Поддерживает Chrome v67-69

Поддерживает Chrome v74

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


Решение

Подробное обсуждение можно найти в Selenium & Heroku: urllib3.exceptions.ProtocolError: ("Соединение прервано", ConnectionResetError (104, "Сброс соединения по одноранговому узлу"))

  • 0
    Спасибо за указание на версию проблемы. Я обновил ChromeDriver до 74.0.3729.6, и это улучшило ситуацию, генерируется больше диаграмм. Однако ошибка «(« Соединение прервано. », ConnectionResetError (104,« Соединение установлено через одноранговый узел »)) все еще возникает, и теперь она случайная (т.е. не для последних файлов x .html, как в исходном выпуске)
  • 0
    @DreX Мне нужно еще раз отладить твой код, чтобы выявить мелкие проблемы. Если этот или какой-либо другой ответ был полезен, пожалуйста, проголосуйте . Как только вы найдете ответ на свой вопрос, отметьте его как принятый, чтобы вопрос не остался без ответа.
0

Это наиболее вероятно, потому что вы используете старую версию драйвера Chrome для новой версии Chrome.

Загрузите последнюю версию драйвера Chrome для вашего Chrome здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню