I'm trying to download file with Python using IE:
from win32com.client import DispatchWithEventsclass EventHandler(object):def OnDownloadBegin(self):passie = DispatchWithEvents("InternetExplorer.Application", EventHandler)ie.Visible = 0ie.Navigate('http://website/file.xml')
After this, I'm getting a window asking the user where to save the file. How can I save this file automatically from python?
I need to use some browser, not urllib or mechanize, because before downloading file I need to interact with some ajax functionality.
This works for me as long as the IE dialogs are in the foreground and the downloaded file does not already exist in the "Save As" directory:
import time
import threading
import win32ui, win32gui, win32com, pythoncom, win32con
from win32com.client import Dispatchclass IeThread(threading.Thread):def run(self):pythoncom.CoInitialize()ie = Dispatch("InternetExplorer.Application")ie.Visible = 0ie.Navigate('http://website/file.xml')def PushButton(handle, label):if win32gui.GetWindowText(handle) == label:win32gui.SendMessage(handle, win32con.BM_CLICK, None, None)return TrueIeThread().start()
time.sleep(3) # wait until IE is started
wnd = win32ui.GetForegroundWindow()
if wnd.GetWindowText() == "File Download - Security Warning":win32gui.EnumChildWindows(wnd.GetSafeHwnd(), PushButton, "&Save");time.sleep(1)wnd = win32ui.GetForegroundWindow()
if wnd.GetWindowText() == "Save As":win32gui.EnumChildWindows(wnd.GetSafeHwnd(), PushButton, "&Save");