How to upload file ( picture ) with selenium, python How to upload file ( picture ) with selenium, python selenium selenium

How to upload file ( picture ) with selenium, python


What I'm doing is this (make sure drv is an instance of webdriver):

drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png")

and then find your submit button and click it.


A very easy way to control components like windows file selector (or just your OS in general) is by using pyautogui. You can install pyautogui through pip

import pyautogui... # set the webdriver etc.......element_present = EC.presence_of_element_located((By.XPATH, "//button[@title='Open file selector']"))  # Example xpathWebDriverWait(self.driver, 10).until(element_present).click() # This opens the windows file selectorpyautogui.write('C:/path_to_file') pyautogui.press('enter')


I added an answer for anyone looking to use deal with the annoying msofiledialogs. This is working off of saravanan's proposed solution, but more fleshed out for Python.

I had a similar problem with a script I'm working on for a company on the side. I'm attempting to upload documents for a company's clients, but due to the way their site worked, I could not utilize send_keys to directly send the path, so I had to rely on msofiledialog.

  1. You only need to install AutoIthttps://pypi.python.org/pypi/PyAutoIt/0.3 or just "pip install -U pyautoit" through the cmd screen

  2. type "import autoit" on your script page

  3. Type the following before the file dialog pops up in your script:

    autoit.win_active("Open") autoit.control_send("Open","Edit1",r"C:\Users\uu\Desktop\TestUpload.txt")autoit.control_send("Open","Edit1","{ENTER}")

It will look for the open file dialog window and fill it out and press enter."Open" is the title of my file dialog screen. Put the title of yours in place of "Open". There are more creative ways to utilize AutoIt's functions, but this is an easy, straightforward way for beginners.

Edit: DO NOT. DO NOT use control_send on most things if you can avoid it. It has a well-known issue of sending erroneous text. In my case, the colon in my file path was being turned into a semi colon. If you need to send input keys, it should be fine, however if you need to send text, use control_set_text. It has the same syntax.

autoit.control_set_text("Open","Edit1",r"C:\Users\uu\Desktop\TestUpload.txt")