Neil Aggarwal
Neil Aggarwal

Reputation: 511

Use Selenium to Save File to Specific Location with A Specific Name

I am trying to download a vcard to a specific location on my desktop, with a specific file name (which I define).

I have the code the can download the file to my desktop.

url = "http://www.kirkland.com/vcard.cfm?itemid=10485&editstatus=0"
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/x-vcard")
browser = webdriver.Firefox(firefox_profile=fp)
browser.get(url)

Note, the URL above is a link to a vcard.

This is saving to the same directory where the code itself exists, and using a file name that was generated by the site I am downloading from.

I want to specify the directory where the file goes, and the name of the file.

Specifically, I would like to call the file something.txt

Also Note, I realize there are much easier ways to do this (using urllib, or urllib2). I need to do it this specific way (if possible) b/c some links are javascript, which require me to use Selenium. I used the above URL as an example to simplify the situation. I can provide other examples/code to show more complex situations if necessary.

Finally, thank you very much for the help I am sure I will get for this post, and for all the help you have provided me for the last year. I dont know how I would have learned all I have learned in this last year had it not been for this community.

Upvotes: 1

Views: 2146

Answers (1)

Neil Aggarwal
Neil Aggarwal

Reputation: 511

I have code that works. Its more of a hack than a solution, but here it is:

# SET FIREFOX PROFILE 
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/x-vcard")

#OPEN URL 
browser = webdriver.Firefox(firefox_profile=fp)
browser.get(url)

#FIND MOST RECENT FILE IN (YOUR) DIR AND RENAME IT
os.chdir("DIR-STRING")
files = filter(os.path.isfile, os.listdir("DIR-STRING"))
files = [os.path.join("DIR-STRING", f) for f in files]
files.sort(key=lambda x: os.path.getmtime(x))
newest_file = files[-1]
os.rename(newest_file, "NEW-FILE-NAME"+"EXTENSION") 

#GET THE STRING, AND DELETE THE FILE
f = open("DIR-STRING"+"NEW-FILE-NAME"+"EXTENSION", "r")
string = f.read()
#DO WHATEVER YOU WANT WITH THE STRING/TEXT FROM THE DOWNLOAD
f.close()
os.remove("DIR-STRING"+"NEW-FILE-NAME"+"EXTENSION")

DIR-STRING is the path to the directory where the file is saved NEW-FILE-NAME is the name of the file you want EXTENSION is the .txt, etc.

Upvotes: 2

Related Questions