2009-11-09 71 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