Search code examples
python-3.xseleniumautoitopenfiledialog

How to change the location?


I'm trying to automate image uploading to Instagram using Selenium in Python. I'm successful till opening the fileDialogue but I'm not able to change the directory to where the image is located. It returns an error that ToolbarWindow32 can't be detected by AutoIt.

My code:

ActionChains(browser).move_to_element(browser.find_element_by_xpath(
    "/html/body/div[8]/div[2]/div/div/div/div[2]/div[1]/div/div/div[2]/div/button")).click().perform()

handle = f"[CLASS:#32770; TITLE:Open]"

autoit.win_wait(handle, 60)

autoit.control_set_text(handle, "ToolbarWindow32", photopath) # This line give me the Error

autoit.control_set_text(handle, "Edit1", photopath)

autoit.control_click(handle, "Button1")

Solution

  • Take a look how this is done in _WD_SelectFiles with: https://github.com/Danp2/au3WebDriver/blob/master/wd_helper.au3

    You should be able to do the same directly with python+selenium without using AutoIt.

    Also take a look on: https://github.com/Danp2/au3WebDriver/blob/master/wd_demo.au3

    There is example how directly in AutoIt it is possible to do the same with WebDriver UDF without opening any FileOpenDialog :

    Func DemoUpload()
        ; REMARK This example uses PNG files created in DemoWindows
    
        ; navigate to "file storing" website
        _WD_Navigate($sSession, "https://www.htmlquick.com/reference/tags/input-file.html")
    
        ; select single file
        _WD_SelectFiles($sSession, $_WD_LOCATOR_ByXPath, "//section[@id='examples']//input[@name='uploadedfile']", @ScriptDir & "\Screen1.png")
    
        ; select two files at once
        _WD_SelectFiles($sSession, $_WD_LOCATOR_ByXPath, "//p[contains(text(),'Upload files:')]//input[@name='uploadedfiles[]']", @ScriptDir & "\Screen1.png" & @LF & @ScriptDir & "\Screen2.png")
    
        ; accept/start uploading
        Local $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//p[contains(text(),'Upload files:')]//input[2]")
        _WD_ElementAction($sSession, $sElement, 'click')
    EndFunc   ;==>DemoUpload