Browser.save_screenshot не работает должным образом

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

from selenium import webdriver
browser = webdriver.Chrome(r'C:\webdrivers\chromedriver.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:\Users\krupn\Desktop\CreateWord\screenshots' + url + '.png')

browser.quit()

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

Nic Laforge 12.03.2019 01:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
540
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Вы можете соединить свои пути с помощью os.join следующим образом:

import os

os.path.join(r'C:\Users\krupn\Desktop\CreateWord\screenshots\', "{}.png".format(url))

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

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

Как заявил OP, ошибок не возникает. Выполнение try/catch только для вывода ошибки даст меньше информации, так как python все равно пройдет через нее с трассировкой.

Nic Laforge 12.03.2019 02:07

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

etherwar 12.03.2019 05:46

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

Corey Goldberg 12.03.2019 15:44

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

etherwar 17.03.2019 06:02

Другие вопросы по теме