# -*- coding:UTF-8 -*-
import sys
from time import sleep
import win32com.client
from win32com.client import DispatchEx
stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr
reload(sys)
sys.setdefaultencoding("utf-8")
sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr
class COM_IE:
def __init__(self,url=None):
self.url = url
self.Visible = 1
self.ie = self.openIE(url)
self.document = ""
self.text = ""
self.charset = None
def ExistIE(self,url):
ShellWindowsCLSID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}'
ies=DispatchEx(ShellWindowsCLSID)
if len(ies)==0:
return None
for ie in ies:
if ie.LocationURL==url:
return ie
return None
def NewIE(self,url):
ie = DispatchEx("InternetExplorer.Application")
ie.Visible = self.Visible
ie.Navigate(url)
return ie
def openIE(self,url):
ie = self.ExistIE(url)
if ie==None:
ie = self.NewIE(url)
return ie
def WaitIE(self):
# while self.ie.Busy:
# leep(1)
while 1:
state = self.ie.ReadyState
if state ==4:
# print "load done..."
self.charset = self.ie.Document.charset
self.document = self.ie.Document.body.innerHTML
self.text = self.ie.Document.body.innerText
break
sleep(1)
def Visible(self):
self.ie.Visible = self.Visible
def GetBody(self):
self.WaitIE()
return self.ie.Document.body
def GetNodes(self,parentNode,tag):
"""
>>> coldiv=GetNodes(body,"div")
"""
childNodes=[]
for childNode in parentNode.getElementsByTagName(tag):
childNodes.append(childNode)
return childNodes
def NodeByAttr(self,Nodes,nodeattr,nodeval):
"""
>>> div_id_editor=NodeByAttr(coldiv,"id","editor_ifr")
"""
for node in Nodes:
if str(node.getAttribute(nodeattr))==nodeval:
return node
return None
def SetNodeHtml(self,body,node_type,node_attr,node_attr_val,node_inner_html):
tags = self.GetNodes(body,node_type)
node = self.NodeByAttr(tags,node_attr,node_attr_val)
node.innerHTML = node_inner_html
def SetNodeVal(self,body,node_type,node_attr,node_attr_val,node_value):
tags = self.GetNodes(body,node_type)
node = self.NodeByAttr(tags,node_attr,node_attr_val)
node.value = node_value
def NodeClick(self,body,node_type,node_attr,node_attr_val):
tags = self.GetNodes(body,node_type)
node = self.NodeByAttr(tags,node_attr,node_attr_val)
node.click()
def GetNodeHtml(self,body,node_type,node_attr,node_attr_val):
tags = self.GetNodes(body,node_type)
node = self.NodeByAttr(tags,node_attr,node_attr_val)
html = node.innerHTML
return html
def GetNodeVal(self,body,node_type,node_attr,node_attr_val):
tags = self.GetNodes(body,node_type)
node = self.NodeByAttr(tags,node_attr,node_attr_val)
value = node.value
return value
#mutiple nodes
def NodesByAttr(self,Nodes,nodeattr=None,nodeval=None):
"""
>>> div_id_editor=NodeByAttr(coldiv,"id","editor_ifr")
"""
value_list = []
for node in Nodes:
# print node.nodeType,node.nodeName #,node.getAttribute("id"),node.innerText
value_dict = {}
if not nodeattr:
nodeattr_list = ["id","nodeName","nodeType","nodeValue","className",
"innerHTML","innerText","href","name","title","type","value"]
for attr in nodeattr_list:
value_dict[attr] = node.getAttribute(attr)
value_list.append(value_dict)
else:
if not nodeval:
value_dict[nodeattr] = node.getAttribute(nodeattr)
value_list.append(value_dict)
else:
if str(node.getAttribute(nodeattr))==nodeval:
value_dict[nodeattr] = node.getAttribute(nodeattr)
value_list.append(value_dict)
return value_list
#mutiple nodes
def GetNodesVal(self,body,node_type,node_attr=None,node_val=None):
# print '*'*50
tags = self.GetNodes(body,node_type)
value_list = self.NodesByAttr(tags,node_attr,node_val)
return value_list
def Quit(self):
self.ie.Quit()
if __name__=="__main__":
url = "http://blog.csdn.net/agoago_2009/"
IE = COM_IE(url)
BODY = IE.GetBody()
# a_list = IE.GetNodesVal(BODY,"a","href")
a_list = IE.GetNodesVal(BODY,"a")
for a in a_list:
print a.get("innerText"),a.get("href")
'''
IE.SetNodeVal(BODY,"input","id","inputSearch","COM")
IE.NodeClick(BODY,"input","id","btnSubmit")
IE.WaitIE()
print IE.document.strip()[:100]
print IE.charset
print IE.text.strip()[:100]
'''
raw_input('quit')
IE.Quit()
http://www.agoago2009.com/