2009-11-09 3 views
0

en fait ce n'est pas le statut de blocage, je veux dire .. sa réponse lente,
donc dans ce cas, je voudrais fermer IE et vouloir redémarrer depuis le début.
donc la fermeture n'est aucun problème, le problème est, comment régler le délai, par exemple si je mets 15sec,
si pas la page Web ouverte moins de 15 sec je veux le fermer et redémarrer depuis le début.
est-ce possible d'utiliser avec IE com interface?
vraiment difficile de trouver la solution Paul,Comment fermer une interface COM Win32 Internet Explorer non réactive?

Je suis habitué à suivre le code pour vérifier wether une page Web est complètement ouvert ou non. Mais comme je l'ai mentionné, cela ne fonctionne pas bien, car IE.navigate a l'air de se bloquer ou de ne pas répondre.

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

Répondre

0

Pour éviter les problèmes de blocage, utilisez l'objet COM IE dans un thread.

Voici un exemple simple mais puissant démontrant comment utiliser ensemble un thread et un objet com IE. Vous pouvez l'améliorer pour votre but. Cet exemple démarre un thread a utilise une file pour communiquer avec le thread principal, dans le thread principal l'utilisateur peut ajouter des URL à la file d'attente, et le thread IE les visite un par un, après avoir terminé une URL, IE visite ensuite. Comme objet IE COM est utilisé dans un fil que vous devez appeler 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

bonjour, merci pour votre réponse, im en utilisant l'interface com-à-dire à cause de javascript soutien. je ne peux pas utiliser mécaniser avec javascript et j'ai été testé autre chose. et finalement j'ai été trouvé le meilleur choix pour moi est PAMIE ou ie interface com, pouvez-vous me montrer un exemple sur l'exemple de fil? si vraiment très utile merci – paul

+0

@paul, j'ai ajouté un exemple, ce qui devrait être suffisant pour votre usage. –

+0

Bonjour, je suis très désolé im assez nouveau pour le fil, je n'ai pas l'expérience. J'étais script d'exécution, mais je suis continuellement visité dans l'adresse web d'url. Comment puis-je visiter une seule fois ou contrôler une méthode? votre script est je pense très bien, mais à cause du manque de ma connaissance :( merci – paul