Приведенный ниже код выполняется в цикле, где открываются 10-15 локальных файлов .html и изображение каждого из них сохраняется в формате .png.
Первые два файла открываются и изображение сохраняется, а остальные приводят к:
("Соединение прервано.", 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 секунд и результат был таким же. Операторы импорта находятся в функции из-за технических требований, которые будут отсортированы на более позднем этапе.
Это сообщение об ошибке...
('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
... подразумевает, что ChromeDriver не смог связаться с WebBrowser, то есть сеансом браузера Chrome.
Ваша основная проблема заключается в несовместимости используемой версии двоичных файлов:
Поддерживает Chrome v67-69
Поддерживает Chrome v74
Таким образом, существует явное несоответствие между ChromeDriver v2.41 и Chrome Browser v74.0
driver.quit()
в tearDown(){}
чтобы изящно закрыть и уничтожить экземпляры WebDriver и Web Client.Подробное обсуждение можно найти в Selenium & Heroku: urllib3.exceptions.ProtocolError: ("Соединение прервано", ConnectionResetError (104, "Сброс соединения по одноранговому узлу"))
Это наиболее вероятно, потому что вы используете старую версию драйвера Chrome для новой версии Chrome.
Загрузите последнюю версию драйвера Chrome для вашего Chrome здесь