The following code creates an IE browser, navigates to Google, and then clicks on the 'News' link.
----- code ----- ie = win32com.client.DispatchEx('InternetExplorer.Application') ie.Visible = 1 ie.Navigate('www.google.com') time.sleep(10) # show a '.' access fairly deep into the page's DOM (to the 'News' link) print 'navigate' anchor = ie.Document.all.tags('BODY').item(0).all.tags('DIV').item(0).all.tags('NOBR' ).item(0).all.tags('DIV').item(3).all.tags('A').item(0) print 'click' anchor.click() ----- end code ----- Interestingly, the rather long statement 'anchor =' works (yes I know there are easier ways to get to the desired tag). I assume (my Python is not so good that I KNOW) that it works since the expression is evaluated left to right and each method returns an object that, in turn, has the appropriate methods for subsequent evaluation. Question 1:Is this the case? While the DOM's navigation methods, see http://msdn2.microsoft.com/en-us/library/ms533050.aspx are powerful, there are a number of instances where I'd like to enhance them. I'm considering the possibility of 'inserting' a method into the object's class dictionary that does so. A bit of experimentation shows that this is possible for any given DOM object. However, there are a bunch of these. The ones I've looked at derive from win32com.client.DispatchBaseClass. Question 2: Do ALL the IE COM objects derive from this class? How can I know for sure without exhaustive examination? A bit more experimentation yielded the following test code: ----- code ----- # test 'injecting' functions into DispatchBaseClass import win32com.client import time class yamieX(object): def __init__(self, wait = 5): self.wait = wait self.ie = win32com.client.DispatchEx('InternetExplorer.Application') self.ie.Visible = 1 self.ie.Navigate('www.google.com') time.sleep(wait) # inject DOM extensions win32com.client.DispatchBaseClass.__dict__['tag']=tag win32com.client.DispatchBaseClass.__dict__['clickWait']=clickWait def GoBack(self): self.ie.GoBack() time.sleep(self.wait) def Wait(self): time.sleep(self.wait) def _body(self): return self.ie.Document.all.tags('BODY').item(0) body = property(_body, None, None, None) def tag(object, str, index=0): return object.all.tags(str).item(index) def clickWait(object, yamieX): object.click() yamieX.Wait() #################### # try the magic out #################### yie = yamieX() print "show a '.' access fairly deep into the page's DOM (to the 'News' link)" print 'navigate and click' anchor = yie.ie.Document.all.tags('BODY').item(0).all.tags('DIV').item(0).all.tags('N OBR').item(0).all.tags('DIV').item(3).all.tags('A').item(0) anchor.click() yie.Wait() print 'show we got to http://news.google.com/nwshp?tab=wn LocationURL=', \ yie.ie.LocationURL == u'http://news.google.com/nwshp?tab=wn' print print 'go back' yie.GoBack() print print "do it again using tag extension" anchor = yie.body.tag('DIV').tag('NOBR').tag('DIV',3).tag('A').clickWait(yie) #anchor.click() yie.Wait() print 'show we got to http://news.google.com/nwshp?tab=wn LocationURL=', \ yie.ie.LocationURL == u'http://news.google.com/nwshp?tab=wn' print 'success' ----- end code ----- All this appears to work in that it creates the expected output. But I'm a bit concerned in that I'm poking Python and win32com rather hard. Question 3: Any advice or observations on how 'safe' this might be? Thanks for any feedback. Regards, Richard _______________________________________________ Python-win32 mailing list Python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32