python : COM-IE 操作2

[python] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. # -*- coding:UTF-8 -*-   
  2. import sys  
  3. from time import sleep  
  4. import win32com.client  
  5. from win32com.client import DispatchEx  
  6.   
  7. stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr  
  8. reload(sys)  
  9. sys.setdefaultencoding("utf-8")  
  10. sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr  
  11.   
  12. class COM_IE:  
  13.     def __init__(self,url=None):  
  14.         self.url = url  
  15.         self.Visible = 1  
  16.         self.ie = self.openIE(url)  
  17.         self.document = ""  
  18.         self.text = ""  
  19.         self.charset = None  
  20.   
  21.     def ExistIE(self,url):  
  22.         ShellWindowsCLSID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}'  
  23.         ies=DispatchEx(ShellWindowsCLSID)  
  24.         if len(ies)==0:  
  25.             return None  
  26.         for ie in ies:  
  27.             if ie.LocationURL==url:  
  28.                 return ie  
  29.         return None  
  30.           
  31.     def NewIE(self,url):  
  32.         ie = DispatchEx("InternetExplorer.Application")  
  33.         ie.Visible = self.Visible  
  34.         ie.Navigate(url)  
  35.         return ie  
  36.           
  37.     def openIE(self,url):  
  38.         ie = self.ExistIE(url)  
  39.         if ie==None:  
  40.             ie = self.NewIE(url)  
  41.         return ie  
  42.           
  43.     def WaitIE(self):  
  44.         # while self.ie.Busy:  
  45.             # leep(1)  
  46.         while 1:      
  47.             state = self.ie.ReadyState      
  48.             if state ==4:   
  49.                 # print "load done..."  
  50.                 self.charset  = self.ie.Document.charset  
  51.                 self.document = self.ie.Document.body.innerHTML  
  52.                 self.text = self.ie.Document.body.innerText   
  53.                 break      
  54.             sleep(1)  
  55.               
  56.     def Visible(self):  
  57.         self.ie.Visible = self.Visible  
  58.           
  59.     def GetBody(self):  
  60.         self.WaitIE()  
  61.         return self.ie.Document.body  
  62.           
  63.     def GetNodes(self,parentNode,tag):  
  64.         """ 
  65.         >>> coldiv=GetNodes(body,"div") 
  66.         """  
  67.         childNodes=[]  
  68.         for childNode in parentNode.getElementsByTagName(tag):  
  69.             childNodes.append(childNode)  
  70.         return childNodes  
  71.           
  72.     def NodeByAttr(self,Nodes,nodeattr,nodeval):  
  73.         """ 
  74.         >>> div_id_editor=NodeByAttr(coldiv,"id","editor_ifr") 
  75.         """  
  76.         for node in Nodes:  
  77.             if str(node.getAttribute(nodeattr))==nodeval:  
  78.                 return node  
  79.         return None  
  80.   
  81.     def SetNodeHtml(self,body,node_type,node_attr,node_attr_val,node_inner_html):  
  82.         tags = self.GetNodes(body,node_type)  
  83.         node = self.NodeByAttr(tags,node_attr,node_attr_val)  
  84.         node.innerHTML = node_inner_html  
  85.               
  86.       
  87.     def SetNodeVal(self,body,node_type,node_attr,node_attr_val,node_value):  
  88.         tags = self.GetNodes(body,node_type)  
  89.         node = self.NodeByAttr(tags,node_attr,node_attr_val)  
  90.         node.value = node_value  
  91.   
  92.     def NodeClick(self,body,node_type,node_attr,node_attr_val):  
  93.         tags = self.GetNodes(body,node_type)  
  94.         node = self.NodeByAttr(tags,node_attr,node_attr_val)  
  95.         node.click()  
  96.           
  97.     def GetNodeHtml(self,body,node_type,node_attr,node_attr_val):  
  98.         tags = self.GetNodes(body,node_type)  
  99.         node = self.NodeByAttr(tags,node_attr,node_attr_val)  
  100.         html = node.innerHTML  
  101.         return html  
  102.           
  103.     def GetNodeVal(self,body,node_type,node_attr,node_attr_val):  
  104.         tags = self.GetNodes(body,node_type)  
  105.         node = self.NodeByAttr(tags,node_attr,node_attr_val)  
  106.         value = node.value   
  107.         return value  
  108.           
  109.           
  110.     #mutiple nodes  
  111.     def NodesByAttr(self,Nodes,nodeattr=None,nodeval=None):  
  112.         """ 
  113.         >>> div_id_editor=NodeByAttr(coldiv,"id","editor_ifr") 
  114.         """  
  115.         value_list = []  
  116.         for node in Nodes:  
  117.             # print node.nodeType,node.nodeName #,node.getAttribute("id"),node.innerText   
  118.             value_dict = {}  
  119.             if not nodeattr:  
  120.                 nodeattr_list = ["id","nodeName","nodeType","nodeValue","className",  
  121.                 "innerHTML","innerText","href","name","title","type","value"]  
  122.                 for attr in nodeattr_list:  
  123.                     value_dict[attr] = node.getAttribute(attr)  
  124.                 value_list.append(value_dict)     
  125.             else:  
  126.                 if not nodeval:  
  127.                     value_dict[nodeattr] = node.getAttribute(nodeattr)  
  128.                     value_list.append(value_dict)  
  129.                 else:  
  130.                     if str(node.getAttribute(nodeattr))==nodeval:  
  131.                         value_dict[nodeattr] = node.getAttribute(nodeattr)  
  132.                         value_list.append(value_dict)     
  133.         return value_list  
  134.       
  135.     #mutiple nodes    
  136.     def GetNodesVal(self,body,node_type,node_attr=None,node_val=None):  
  137.       
  138.         # print '*'*50  
  139.         tags = self.GetNodes(body,node_type)  
  140.         value_list = self.NodesByAttr(tags,node_attr,node_val)    
  141.         return value_list  
  142.   
  143.     def Quit(self):  
  144.         self.ie.Quit()  
  145.   
  146.   
  147. if __name__=="__main__":  
  148.   
  149.     url = "http://blog.csdn.net/agoago_2009/"  
  150.     IE = COM_IE(url)  
  151.     BODY = IE.GetBody()  
  152.       
  153.     # a_list = IE.GetNodesVal(BODY,"a","href")  
  154.     a_list = IE.GetNodesVal(BODY,"a")  
  155.     for a in a_list:  
  156.         print a.get("innerText"),a.get("href")  
  157.       
  158.       
  159.       
  160.     ''''' 
  161.     IE.SetNodeVal(BODY,"input","id","inputSearch","COM") 
  162.     IE.NodeClick(BODY,"input","id","btnSubmit") 
  163.      
  164.     IE.WaitIE() 
  165.     print IE.document.strip()[:100] 
  166.     print IE.charset 
  167.     print IE.text.strip()[:100] 
  168.     '''  
  169.       
  170.     raw_input('quit')  
  171.     IE.Quit()         
  172.       
  173.       
  174.       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章