爲避免阻塞問題,請在線程中使用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