2009-11-09 3 views
0

на самом деле это не зависание, я имею в виду..и медленный ответ,
поэтому в этом случае я хотел бы закрыть IE и хочу перезапустить с начала.
поэтому закрытие не проблема, проблема в том, как установить тайм-аут, например, если я установил 15сек,
если не веб-страница открыта менее 15 секунд, я хочу ее закрыть и перезапустить с начала.
можно ли использовать с интерфейсом IE com?
очень трудно найти решение Павла,Как закрыть нечувствительный интерфейс Win32 Internet Explorer COM?

Я привык следовать коду для проверки кастрированного барана веб-страницы полностью открыт или нет. Но, как я уже упоминал, он не работает хорошо, потому что IE.navigate выглядит так, как будто он зависает или не отвечает.

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

ответ

0

Чтобы избежать проблем с блокировкой, используйте IE COM-объект в потоке.

Вот простой, но мощный пример, демонстрирующий, как вы можете совместно использовать поток и объект IE com. Вы можете улучшить его для своей цели.

В этом примере начинается поток a использует очередь для связи с основным потоком, в основном потоке пользователь может добавлять URL-адреса в очередь, а поток 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

привет, спасибо за ответ, им с помощью т ком интерфейс из-за поддержки JavaScript. Я не могу использовать mechanize с javascript, и у меня была проверена другая вещь. и, наконец, я понял, что лучший выбор для меня - это PAMIE или т. Е. Интерфейс com, можете ли вы показать мне пример про пример потока? если это действительно полезно спасибо – paul

+0

@paul, я добавил пример, которого должно быть достаточно для вашей цели. –

+0

Привет, им очень жаль им совсем новый, я не имею опыта. Я исполнял скрипт, но постоянно посещал его по адресу url. как я могу только один раз URL-адрес посещать или контролировать какой-то метод? ваш сценарий, я думаю, очень хорошо, но из-за недостатка моих знаний :( спасибо – paul

 Смежные вопросы

  • Нет связанных вопросов^_^