browser.save_screenshot работает не так, как ожидалось

#python-3.x #selenium #screenshot

#python-3.x #selenium #скриншот

Вопрос:

У меня есть файл со ссылками, и мне нужно сделать скриншоты страниц. Но мой код не хочет сохранять изображения. Код выполняется без ошибок, но папка вывода пуста.

 from selenium import webdriver
browser = webdriver.Chrome(r'C:webdriverschromedriver.exe')
browser.set_page_load_timeout(100)    
browser.maximize_window()

file = open('links.txt', 'r', encoding="ISO-8859-1")
urls = file.readlines()
for url in urls:
    url = url.strip ('n')
    try:
        browser.get(url)
    except:
        print(url   ' took too long')
   else:
       # where images saved
       browser.save_screenshot(r'C:UserskrupnDesktopCreateWordscreenshots'   url   '.png')

browser.quit()
  

Комментарии:

1. Возможно, у вас проблема с тем, как вы генерируете путь к файлу. Можете ли вы предоставить вывод URL-адреса. Было бы неплохо использовать os.path.join(каталог, url .png) (безопаснее)

Ответ №1:

Убедитесь, что python не запущен из-за проблемы с разрешениями для записи на рабочий стол (запустите от имени администратора или попробуйте еще раз, кроме попытки записи скриншота, и выведите любое исключение, которое может возникнуть при записи).

Также вы можете записать каталог выше того, что вы думаете, и создать файл с именем C:UserskrupnDesktopCreateWordscreenshots [url].png (где [url] — это ваша переменная url).

Вы можете объединить свои пути с помощью os.присоединяйтесь вот так:

 import os

os.path.join(r'C:UserskrupnDesktopCreateWordscreenshots', "{}.png".format(url))
  

Также было бы разумно очистить строку вашего URL, прежде чем использовать ее как часть пути, если есть какие-либо косые черты или недопустимые символы, которые могли бы объяснить, почему сохранение скриншота не работает.

Спасибо пользователю Corey Goldberg за указание на то, что в примере os.path.join отсутствовал необходимый r, добавляющий строку, чтобы обратная косая черта не действовала как escape-символы

Комментарии:

1. Как указано в OP, ошибка не генерируется. Выполнение попытки / перехвата только для печати ошибки предоставило бы меньше информации, поскольку python в любом случае обработает ее с помощью обратной трассировки.

2. @NicLaforge справедливое замечание, если selenium внутренне не обрабатывает ошибки, такие как потенциально недопустимые имена файлов. Если вы уверены, что это не так, вы абсолютно правы.

3. в вашем os.join примере используются обратные косые черты, которые являются escape-символом. вам нужно либо сделать путь необработанной строкой, экранировать обратную косую черту, либо заменить их косыми чертами в прямом направлении.

4. @CoreyGoldberg Спасибо, что указали на это. Я исправил это и добавил благодарность за ваше исправление.