为避免阻塞问题,请在线程中使用IE COM对象。
这里是一个简单但强大的例子,演示如何将线程和IE com对象一起使用。您可以根据自己的目的改进它。
本例启动一个线程使用一个队列与主线程通信,在主线程中用户可以将队列添加到urls中,并且IE线程逐一访问它们,之后他完成一个url,然后IE访问。由于IE的COM对象是在一个线程中使用,你需要调用CoInitialize
from threading import Thread
from Queue import Queue
from win32com.client import Dispatch
import pythoncom
import time
class IEThread(Thread):
def __init__(self):
Thread.__init__(self)
self.queue = Queue()
def run(self):
ie = None
# as IE Com object will be used in thread, do CoInitialize
pythoncom.CoInitialize()
try:
ie = Dispatch("InternetExplorer.Application")
ie.Visible = 1
while 1:
url = self.queue.get()
print "Visiting...",url
ie.Navigate(url)
while ie.Busy:
time.sleep(0.1)
except Exception,e:
print "Error in IEThread:",e
if ie is not None:
ie.Quit()
ieThread = IEThread()
ieThread.start()
while 1:
url = raw_input("enter url to visit:")
if url == 'q':
break
ieThread.queue.put(url)
您好,感谢您的回复, IM即使用COM接口,因为JavaScript的支持。 我不能使用JavaScript进行机械化,我被测试了其他的东西。 最后我想通了我最好的选择是PAMIE或即COM接口,你能告诉我一些关于线程例子的例子吗? 如果真的很有帮助谢谢 – paul 2009-11-09 13:38:33
@paul,我已经添加了一个例子,它应该足以满足您的需求。 – 2009-11-09 14:40:53
你好,我很抱歉 即时通讯相当新,我没有经验。 我是执行脚本,但继续访问网址的网址。我怎么能只有一次访问或控制一些方法的网址? 你的剧本是我认为非常好,但由于缺乏我的知识:( 谢谢 – paul 2009-11-09 18:30:55