2009-11-09 72 views
0

其实这是不是挂状态,我的意思是..它慢响应,
所以在那种情况下, 我想关闭IE和 要重新启动。
所以关闭是没有问题的,问题是,如何设置超时,例如,如果我设置15秒,
如果不是网页打开少于15秒我想关闭它,并从头开始重新启动。
这是可以使用IE浏览器的界面?
真的很难找到解决方案 Paul,如何关闭不响应的Win32 Internet Explorer COM接口?

我用来跟随代码来检查网页是否完全打开或没有。 但正如我所提到的,它工作不正常,因为IE.navigate看起来像挂起或不响应。

 while ie.ReadyState != 4: 
       time.sleep(0.5) 

回答

0

为避免阻塞问题,请在线程中使用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) 
+0

您好,感谢您的回复, IM即使用COM接口,因为JavaScript的支持。 我不能使用JavaScript进行机械化,我被测试了其他的东西。 最后我想通了我最好的选择是PAMIE或即COM接口,你能告诉我一些关于线程例子的例子吗? 如果真的很有帮助谢谢 – paul 2009-11-09 13:38:33

+0

@paul,我已经添加了一个例子,它应该足以满足您的需求。 – 2009-11-09 14:40:53

+0

你好,我很抱歉 即时通讯相当新,我没有经验。 我是执行脚本,但继续访问网址的网址。我怎么能只有一次访问或控制一些方法的网址? 你的剧本是我认为非常好,但由于缺乏我的知识:( 谢谢 – paul 2009-11-09 18:30:55

相关问题