(Selenium) Проблема с загрузкой и переименованием файла

#python #selenium #web-scraping #beautifulsoup #python-requests

#python #selenium #очистка веб-страниц #beautifulsoup #python-запросы

Вопрос:

Я использую selenium для входа на страницу и загрузки некоторых файлов tiff, теперь у меня есть переменная downloadurl , она содержит массив URL-ссылок, которые я скопировал с веб-сайта. теперь я использую приведенный ниже код для загрузки файлов:

  driver = webdriver.Chrome();
 driver.get(downloadurl)
  

Я получаю все загруженные файлы, но без имен, например. img (1), img (2)…

Теперь моя проблема в следующем: я хочу driver.get(downloadurl) загружать файлы один за другим в соответствии с downloadurl последовательностью массивов и переименовывать файл сразу после его загрузки в соответствии с title переменной, которая является массивом, затем загружать следующий файл и переименовывать…

P.S. Я избегаю использовать запросы, потому что процедура входа в систему очень сложная и требует файлов cookie авторизации.

Большое спасибо за помощь!

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

1. Если вы знаете, что он будет сохранен как img(1) изначально, просто попросите ваш скрипт загрузить файл, а затем os.rename() файл из «img (1)» во что угодно. Затем промойте и повторите, потому что все они будут загружаться с одинаковым именем. docs.python.org/3/library/os.html#os.rename

Ответ №1:

Чтобы развить мой комментарий:

 import os
import time

for downloadlink, uniqueName in my_list_of_links_and_names:
    driver = webdriver.Chrome();
    driver.get(downloadurl)
    time.sleep(5) # give it time to download (not sure if this is necessary)
    # the file is now downloaded
    os.rename("img(1).png", uniqueName) # the name is now changed
  

Это сработает при условии, что «img (1).png» будет переименован, а затем следующая загрузка снова появится как «img (1).png».

Самой сложной частью было бы создание my_list_of_links_and_names но если у вас есть данные в отдельных списках, просто zip() соедините их вместе. Вы также можете генерировать свой собственный заголовок для каждого цикла на основе некоторых критериев…

Ответ №2:

Сначала мы создадим функцию (Rename_file), которая переименует загруженное изображение из его папки.

 def Rename_file(new_name, Dl_path):  #Renames Downloaded Files in the path
    filename = max([f for f in os.listdir(Dl_path)])
    if 'image.png' in filename: #Finds 'image.png' name in said path
            time.sleep(2) #you can change the value in here depending on your requirements
            os.rename(os.path.join(Dl_path, filename), os.path.join(Dl_path, new_name '.png')) #can be changed to .jpg etc
  

Затем мы применяем эту функцию к массиву URL-ссылок:

 for link in downloadurl: #Will get each link in download url array
    for new_name in title:
            driver.get(link) #download the said image in link
            Rename_file(new_name,Dl_path)
  

Пример кода:

 downloadurl = ['www.sample2.com','www.sample2.com'] 
Dl_path  = "//location//of//image_downloaded"
title  = ['Title 1', 'Title 2']

def Rename_file(new_name, Dl_path):  
    filename = max([f for f in os.listdir(Dl_path)])
    if 'image.png' in filename: 
            time.sleep(2)
            os.rename(os.path.join(Dl_path, filename), os.path.join(Dl_path, new_name '.png'))

for new_name in title:
   for link in downloadurl: 
            driver.get(link) 
            time.sleep(2)
            Rename_file(new_name,Dl_path)
  

Я совершенно уверен в созданной мной функции переименования, но я действительно не тестировал это с массивом URL-ссылок, поскольку я действительно не могу придумать, где я мог бы это протестировать. Надеюсь, у вас это сработает. Пожалуйста, дайте мне знать 🙂