Hi ihr alle! Habe folgendes Problem: from time import sleep from win32com.client import Dispatch searchurl = ... msie = Dispatch('InternetExplorer.Application.1') msie.Navigate(searchurl) while msie.Busy: sleep(0.05) doc = msie.Document formelems = doc.getElementsByTagName('input') for idx in xrange(formelems.length): formelem = formelems(idx) if formelem.type.lower() == 'submit': button.onclick = <ACTION> Was hier passieren soll: Internet Explorer wird "ferngesteuert", sobald das Dokument da ist, wird hiner alle Buttons ein Eventhandler für Klicks gehängt. Problem: Wie "verpack" ich die Eventhandler!? Hat jemand sowas schon mal gemacht oder kann mir da weiterhelfen? (Diskussion in comp.lang.python streifen das Thema, kommen aber nie richtig zur Sache) Florian _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de
Hallo, ich hab ein Template, welches ein zweites Template in sich aufruft. Dieses ist aber immer verschieden. Wie mach ich das? so gehts nicht: Template: ... <?=inc '<?=echo templateurl ?>' ?> ... Script: ... t.templateurl = "../template1.ctpl" ... Habt ihr ne Idee? Gruß Huppi _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de
Florian Fredegar Haftmann wrote: [schnipp]
Was hier passieren soll: Internet Explorer wird "ferngesteuert", sobald das Dokument da ist, wird hiner alle Buttons ein Eventhandler für Klicks gehängt.
Problem: Wie "verpack" ich die Eventhandler!?
In $PREFIX/Lib/site-packages/win32com/client/__init__.py gibt es u.a. die Funktion def DispatchWithEvents(clsid, user_event_class) mit einem Beispiel, um Events abzufangen. Es wird eine Klasse benötigt wie die folgende: (siehe $PREFIX\Lib\site-packages\win32com\gen_py\EAB22AC0-30C1-11CF-A7EB-0000C05BAE0Bx0x1x1.py für Details) class IWebBrowserEvents2: "Web Browser Control events interface" # Handlers for the control # If you create handlers, they should have the following prototypes: # def OnWindowSetTop(self, Top=defaultNamedNotOptArg): # """Fired when the host window should change its Top coordinate""" # def OnStatusTextChange(self, Text=defaultNamedNotOptArg): # """Statusbar text changed.""" # def OnWindowClosing(self, IsChildWindow=defaultNamedNotOptArg, Cancel=defaultNamedNotOptArg): # """Fired when the WebBrowser is about to be closed by script""" # def OnFileDownload(self, Cancel=defaultNamedNotOptArg): # """Fired to indicate the File Download dialog is opening""" # def OnStatusBar(self, StatusBar=defaultNamedNotOptArg): # """Fired when the statusbar should be shown/hidden""" # def OnWindowSetResizable(self, Resizable=defaultNamedNotOptArg): # """Fired when the host window should allow/disallow resizing""" # def OnNewWindow2(self, ppDisp=defaultNamedNotOptArg, Cancel=defaultNamedNotOptArg): # """A new, hidden, non-navigated WebBrowser window is needed.""" # def OnDownloadComplete(self): # """Download of page complete.""" # def OnBeforeNavigate2(self, pDisp=defaultNamedNotOptArg, URL=defaultNamedNotOptArg, Flags=defaultNamedNotOptArg, TargetFrameName=defaultNamedNotOptArg, PostData=defaultNamedNotOptArg, Headers=defaultNamedNotOptArg, Cancel=defaultNamedNotOptArg): # """Fired before navigate occurs in the given WebBrowser (window or frameset element). The processing of this navigation may be modified.""" # def OnSetSecureLockIcon(self, SecureLockIcon=defaultNamedNotOptArg): # """Fired to indicate the security level of the current web page contents""" # def OnProgressChange(self, Progress=defaultNamedNotOptArg, ProgressMax=defaultNamedNotOptArg): # """Fired when download progress is updated.""" # def OnCommandStateChange(self, Command=defaultNamedNotOptArg, Enable=defaultNamedNotOptArg): # """The enabled state of a command changed.""" # def OnClientToHostWindow(self, CX=defaultNamedNotOptArg, CY=defaultNamedNotOptArg): # """Fired to request client sizes be converted to host window sizes""" # def OnDownloadBegin(self): # """Download of a page started.""" # def OnWindowSetWidth(self, Width=defaultNamedNotOptArg): # """Fired when the host window should change its width""" # def OnFullScreen(self, FullScreen=defaultNamedNotOptArg): # """Fired when fullscreen mode should be on/off""" # def OnDocumentComplete(self, pDisp=defaultNamedNotOptArg, URL=defaultNamedNotOptArg): # """Fired when the document being navigated to reaches ReadyState_Complete.""" # def OnMenuBar(self, MenuBar=defaultNamedNotOptArg): # """Fired when the menubar should be shown/hidden""" # def OnQuit(self): # """Fired when application is quiting.""" # def OnWindowSetLeft(self, Left=defaultNamedNotOptArg): # """Fired when the host window should change its Left coordinate""" # def OnPropertyChange(self, szProperty=defaultNamedNotOptArg): # """Fired when the PutProperty method has been called.""" # def OnTitleChange(self, Text=defaultNamedNotOptArg): # """Document title changed.""" # def OnWindowSetHeight(self, Height=defaultNamedNotOptArg): # """Fired when the host window should change its height""" # def OnNavigateComplete2(self, pDisp=defaultNamedNotOptArg, URL=defaultNamedNotOptArg): # """Fired when the document being navigated to becomes visible and enters the navigation stack.""" # def OnToolBar(self, ToolBar=defaultNamedNotOptArg): # """Fired when the toolbar should be shown/hidden""" # def OnTheaterMode(self, TheaterMode=defaultNamedNotOptArg): # """Fired when theater mode should be on/off""" # def OnVisible(self, Visible=defaultNamedNotOptArg): # """Fired when the window should be shown/hidden""" Beispiel (ungetestet - Ausschnitt aus einem großen package): import sys from win32com.client import constants, DispatchWithEvents from pythoncom import com_error, Missing from time import sleep optArg = defaultNamedNotOptArg = Missing ready = 4 # constants.READYSTATE_COMPLETE class InternetExplorerEvents: "Web Browser Control events interface suitable for debugging." _write = sys.stderr.write def set_debug(self, write=sys.stderr.write): self._write = write def OnVisible(self, Visible=optArg): self._write('OnVisible(%s)\n' % `Visible`) def OnTitleChange(self, Text=optArg): self._write('OnTitleChange(%s)\n' % `Text`) def OnDownloadBegin(self): self._write('OnDownloadBegin()\n') def OnQuit(self): self._write('OnQuit()\n') def OnCommandStateChange(self, Command=optArg, Enable=optArg): self._write('OnCommandStateChange(%s, %s)\n' % (`Command`, `Enable`)) def OnToolBar(self, ToolBar=optArg): self._write('OnToolBar(%s)\n' % `ToolBar`) def OnNavigateComplete2(self, pDisp=optArg, URL=optArg): self._write('OnNavigateComplete2(%s, %s)\n' % (`pDisp`, `URL`)) def OnBeforeNavigate2(self, pDisp=optArg, URL=optArg, Flags=optArg, TargetFrameName=optArg, PostData=optArg, Headers=optArg, Cancel=optArg): self._write('OnBeforeNavigate2(' '%s, %s, %s, %s, ' '%s, %s, %s)\n' % (`pDisp`, `URL`, `Flags`, `TargetFrameName`, `PostData`, `Headers`, `Cancel`)) def OnNewWindow2(self, ppDisp=optArg, Cancel=optArg): self._write('OnNewWindow2(%s, %s)\n' % (`ppDisp`, `Cancel`)) def OnTheaterMode(self, TheaterMode=optArg): self._write('OnTheaterMode(%s)\n' % `TheaterMode`) def OnProgressChange(self, Progress=optArg, ProgressMax=optArg): self._write('OnProgressChange(%s, %s)\n' % (`Progress`, `ProgressMax`)) def OnStatusBar(self, StatusBar=optArg): self._write('OnStatusBar(%s)\n' % `StatusBar`) def OnPropertyChange(self, szProperty=optArg): self._write('OnPropertyChange(%s)\n' % `szProperty`) def OnMenuBar(self, MenuBar=optArg): self._write('OnMenuBar(%s)\n' % `MenuBar`) def OnStatusTextChange(self, Text=optArg): self._write('OnStatusTextChange(%s)\n' % `Text`) def OnDocumentComplete(self, pDisp=optArg, URL=optArg): self._write('OnDocumentComplete(%s, %s)\n' % (`pDisp`, `URL`)) def OnDownloadComplete(self): self._write('OnDownloadComplete()\n') def OnFullScreen(self, FullScreen=optArg): self._write('OnFullScreen(%s)\n' % `FullScreen`) def browse(url=None, write=sys.stderr.write): """Test drive IE. Usage: >>> import WebBrowserEvents >>> url = None # browse docs... >>> WebBrowserEvents.browse(url) """ ie = DispatchWithEvents('InternetExplorer.Application', InternetExplorerEvents) ie.set_debug(write=write) if url is None: url = r'file:/%s\Doc\index.html' % sys.prefix ie.Navigate(url) try: while ie.ReadyState != ready: sleep(0.1) document = ie.Document all = document.all window = document.frames screen = window.screen if not window.opener and window.parent == window.self: window.moveTo(0, 0) window.resizeTo(screen.availWidth, screen.availHeight) except com_error, err_msg: write('--> %s: %s\n' % (com_error.__name__, err_msg)) ie.Left = 0 ie.Top = 0 ie.Width = 1024 ie.Height = 741 ie.Visible = 1 return ie def test(url, wait=1, write=sys.stderr.write): """Test drive IE. Usage: >>> import WebBrowserEvents, sys >>> url = r'file:/%s\Doc\index.html' % sys.prefix >>> WebBrowserEvents.test(url) """ ie = DispatchWithEvents('InternetExplorer.Application', InternetExplorerEvents) ie.set_debug(write=write) if 0: ie.Left = 0 ie.Top = 0 ie.Width = 1024 ie.Height = 741 ie.Visible = 1 # write('--> About to Navigate...\n') ie.Navigate(url) try: while ie.ReadyState != ready: sleep(0.01) document = ie.Document all = document.all window = document.frames screen = window.screen if not window.opener and window.parent == window.self: window.moveTo(0, 0) window.resizeTo(screen.availWidth, screen.availHeight) except com_error, err_msg: write('--> %s: %s\n' % (com_error.__name__, err_msg)) if not wait: while ie.Busy: sleep(0.01) write('--> Use Quit() to exit from IE\n') return ie while ie.Visible: sleep(0.01) # write('--> IE not visible any more\n') if 0: try: write('--> Trying to quit\n') ie.Quit() write('--> Quit succeeded\n') except com_error, err_msg: write('--> %s: %s\n' % (com_error.__name__, err_msg)) # write('--> Exit\n') if __name__ == '__main__': if len(sys.argv) == 1: url = raw_input('url: ') if not url: # url = 'http://www.python.org/index.html' url = r'file:/%s\Python\Doc\index.html' % sys.prefix else: url = sys.argv[1] test(url) _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de
Danke, funktioniert wunderbar. Folgendes Problem bleibt: [...] class ButtonHandler(html.HTMLButtonElementEvents): def __init__(self, button, oldevt = None): self.button = button self.oldevt = oldevt html.HTMLButtonElementEvents.__init__(self, button) def Ononclick(self): [... any action ...] if self.oldevt: classdiag(self.oldevt) self.oldevt() <----------------------- ????????????????? tagset = doc.getElementsByTagName('input') for idx in xrange(tagset.length): tag = tagset(idx) if tag.type.lower() in ('submit', 'button', 'reset'): oldevt = getattr(tag, 'onclick', None) bhandler = ButtonHandler(tag, oldevt) if oldevt: tag.onclick = u"" Es soll um folgendes gehen: Hinter alle Buttons wird ein EventHandler gelegt, ein eventuell schon vorhandener wird "stillgelegt". Nun soll aber, nachdem der Handler seine eigenen Jobs erledigt hat, der alte (abgelegt in self.oldevt) noch aufgerufen werden. Was ist die Syntax dafür? self.oldevt() liefert einfach einen String mit textueller Repräsentation, .Fire() und .Invoke() gibts nicht. Florian _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de
participants (4)
-
Florian Fredegar Haftmann
-
Florian Haftmann
-
Oliver Schaefer
-
python-welt.de