2015-12-31 13 views
5

Ich arbeite mit einem Selenium-Skript, wo ich versuche, eine Excel-Datei herunterladen und geben Sie einen bestimmten Namen. Das ist mein Code:Selen geben Dateinamen beim Herunterladen

Gibt es trotzdem, dass ich der Datei einen bestimmten Namen herunterladen kann?

Code:

#!/usr/bin/python 
from selenium import webdriver 
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile 

profile = FirefoxProfile() 
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream") 
profile.set_preference("browser.download.dir", "C:\\Downloads") 
browser = webdriver.Firefox(firefox_profile=profile) 

browser.get('https://test.com/') 
browser.find_element_by_partial_link_text("Excel").click() # Download file 
+0

Warum umbenennen Sie es nicht nach dem Download Verwenden Sie das Modul [Shut] (https://docs.python.org/2/library/shutil.html#module-shutil)? –

+0

Da der Dateiname immer einen zufälligen Namen hat, möchte ich ihn benennen, wenn ich ihn herunterlade. So wird es später leichter zu finden sein. – user3580316

Antwort

3

Sie können nicht Namen Download-Datei durch Selen angeben. Sie können jedoch die Datei herunterladen, die neueste Datei im heruntergeladenen Ordner finden und sie umbenennen, wie Sie möchten.

Hinweis: Ausgeliehene Methoden von Google-Suchen können Fehler enthalten. aber du hast die Idee.

import os 
import shutil 

filename = max([f for f in os.listdir('c:\downloads')], key=os.path.getctime) 
shutil.move(os.path.join(dirpath,filename),newfilename) 
+2

Das gibt mir "Datei" /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/genericpath.py ", Zeile 72, in getctime zurück os. stat (Dateiname) .st_ctime OSError: [Errno 2] Keine solche Datei oder Verzeichnis: '.localized'' – altabq

0

Sie können die Datei herunterladen und zugleich nennen urlretrieve mit:

import urllib 

url = browser.find_element_by_partial_link_text("Excel").get_attribute('href') 
urllib.urlretrieve(url, "/choose/your/file_name.xlsx") 
0

Es gibt etwas i für @parishodak Antwort korrigieren würde:

der Dateiname hier wird nur Rückkehr der relative Pfad (hier der Name der Datei) nicht der absolute Pfad

Deshalb @FreshRamen den folgenden Fehler nach bekam:

File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/‌​python2.7/genericpath.py", 
line 72, in getctime return os.stat(filename).st_ctime OSError: 
[Errno 2] No such file or directory: '.localized' 

Es ist der richtige Code:

import os 
import shutil 

filepath = 'c:\downloads' 
filename = max([filepath +"\"+ f for f in os.listdir(filepath)], key=os.path.getctime) 
shutil.move(os.path.join(dirpath,filename),newfilename) 
+0

Installierte 'dirpath' in python3, aber eine andere Abhängigkeit'cached'. Ich kann es nicht finden. Irgendeine alternative Lösung? –

0

Hoffnung dieser Ausschnitt nicht verwirrend ist. Ich habe eine Weile gebraucht, um das zu erstellen, und es ist wirklich nützlich, denn es gibt keine klare Antwort auf dieses Problem, nur mit dieser Bibliothek.

import os 
import time 
def tiny_file_rename(newname, folder_of download): 
    filename = max([f for f in os.listdir(folder_of download)], key=lambda xa : os.path.getctime(os.path.join(folder_of_download,xa))) 
    if '.part' in filename: 
     time.sleep(1) 
     os.rename(os.path.join(folder_of download, filename), os.path.join(folder_of download, newname)) 
    else: 
     os.rename(os.path.join(folder_of download, filename),os.path.join(folder_of download,newname)) 

Hoffe das spart jemandes Tag, Prost.

EDIT: Dank @Om Prakash Bearbeitung meines Codes, erinnerte ich mich daran, dass ich den Code nicht erklären.

Die Verwendung der max([])-Funktion könnte zu einer Race-Bedingung führen, so dass Sie eine leere oder beschädigte Datei erhalten (ich weiß es aus Erfahrung). Sie möchten überprüfen, ob die Datei vollständig heruntergeladen wurde. Dies liegt daran, dass Selen nicht darauf wartet, dass der Datei-Download abgeschlossen wird. Wenn Sie also nach der zuletzt erstellten Datei suchen, wird eine unvollständige Datei in Ihrer generierten Liste angezeigt und versucht, diese Datei zu verschieben. Und selbst dann ist es besser, wenn Sie ein wenig warten, bis die Datei von Firefox frei ist.

Verwandte Themen