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

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

  • Ubuntu Server 16.04
  • ChromeDriver 2.41.578700
  • Google Chrome 74.0.3729.108
  • селен 3.141.0
  • Python3.6

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

('Соединение прервано.', ConnectionResetError (104, 'Соединениесброс с помощью peer '))

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

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)

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

Ответы [ 2 ]

4 голосов
/ 25 апреля 2019

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

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

... означает, что ChromeDriver не смог связаться с WebBrowser , то есть Chrome Browser сеанс.

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

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

Поддержка Chrome v67-69

  • Вы используете chrome = 74.0
  • Примечания к выпуску ChromeDriver v74.x четко упоминается следующее:

Поддержка Chrome v74

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


Решение

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

0 голосов
/ 25 апреля 2019

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

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

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