实际上这不是挂起状态,我的意思是......响应很慢,
那么在这种情况下,
我想关闭IE和
想从头开始重启。
所以关闭没有问题,问题是,如何设置超时,例如,如果我设置15秒,如果不是网页打开不到15秒我想关闭它并从开始重新启动。
这可以用于IE com接口吗?
真的很难找到解决方案
保罗,
我习惯按照代码检查网页是否完全打开。 但正如我所提到的,它运行不正常,因为IE.navigate看起来像挂起或没有响应。
while ie.ReadyState != 4:
time.sleep(0.5)
答案 0 :(得分:0)
为避免阻塞问题,请在线程中使用IE COM对象。
这是一个简单但功能强大的示例,演示如何将线程和IE com对象一起使用。你可以为你的目的改进它。
这个例子启动一个线程a使用队列与主线程进行通信,在主线程中用户可以将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)