0

実際、これはハング状態ではありません。つまり、応答が遅い
ので、その場合はIEを閉じて、最初からやり直したいと思います。
したがって、閉じるのは問題ありません。問題は、タイムアウトの設定方法です。たとえば、15秒を設定した
場合、15秒未満でウェブページを開かない場合は、閉じて最初からやり直します。
これはIEcomインターフェースで使用できますか?
解決策を見つけるのは本当に難しいポール、

私はコードに従って、Webページが完全に開いているかどうかを確認するのに慣れています。しかし、前述したように、IE.navigateがハングしたり応答しなかったりするように見えるため、うまく機能していません。

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

1 に答える 1

0

ブロッキングの問題を回避するには、スレッドでIECOMオブジェクトを使用します。

これは、スレッドとIEcomオブジェクトを一緒に使用する方法を示すシンプルで強力な例です。あなたはあなたの目的のためにそれを改善することができます。

この例では、キューを使用してメインスレッドと通信するスレッドを開始します。メインスレッドでは、ユーザーはURLをキューに追加できます。IEスレッドは1つのURLを終了した後、次のURLにアクセスします。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)
于 2009-11-09T12:07:39.020 に答える