2009-12-27 5 views
2

Пожалуйста, помогите мне с Python 2.6 и win32com.Python: ошибка при проверке состояния IE

Я не являюсь новичком в Python, и я получил ошибку , когда я начинаю следующую программу:

import pywintypes 
from win32com.client import Dispatch 
from time import sleep 

ie = Dispatch("InternetExplorer.Application") 
ie.visible=1 
url='hotfile.com' 

ie.navigate(url) 
while ie.ReadyState !=4: 
    sleep(1) 
print 'OK' 
.......................... 
Error message: 
while ie.ReadyState !=4: 
... 

pywintypes.com_error: 
(-2147023179, 'Unknown interface.', None, None) 
.......................... 

Но когда я изменить URL, например, «yahoo.com» - есть нет ошибки.
Как результат проверки ReadyState может зависеть от URL?

+0

Может быть, это потому, что Hotfile. com - действительный URL (код результата 200), как есть, и yahoo.com дает HTTP 302 перенаправленным? – Kimvais

+0

http://hotfile.com - это действительный сайт. И это yahoo.com, конечно ... –

ответ

1

Сонный трюк не будет работать с IE. Вам действительно нужно перекачивать сообщения, пока вы ждете. Я не думаю, что поток будет работать, кстати, потому что IE ненавидит не быть в потоке графического интерфейса.

Вот информационный насос с информацией о ctypes, с помощью которого я смог получить 4 ReadyState для «hotfile.com» и «yahoo.com». Он извлекает все сообщения в очереди и обрабатывает их перед запуском проверки.

(Да, это довольно волосатый, но вы можете подвернуть это далеко в функцию «pump_messages», так что вы по крайней мере, не должны смотреть на это!)

from ctypes import Structure, pointer, windll 
from ctypes import c_int, c_long, c_uint 
import win32con 
import pywintypes 
from win32com.client import Dispatch 

class POINT(Structure): 
    _fields_ = [('x', c_long), 
       ('y', c_long)] 
    def __init__(self, x=0, y=0): 
     self.x = x 
     self.y = y 

class MSG(Structure): 
    _fields_ = [('hwnd', c_int), 
       ('message', c_uint), 
       ('wParam', c_int), 
       ('lParam', c_int), 
       ('time', c_int), 
       ('pt', POINT)] 

msg = MSG() 
pMsg = pointer(msg) 
NULL = c_int(win32con.NULL) 

ie = Dispatch("InternetExplorer.Application") 
ie.visible=1 
url='hotfile.com' 
ie.navigate(url) 

while True: 

    while windll.user32.PeekMessageW(pMsg, NULL, 0, 0, win32con.PM_REMOVE) != 0: 
     windll.user32.TranslateMessage(pMsg) 
     windll.user32.DispatchMessageW(pMsg) 

    if ie.ReadyState == 4: 
     print "Gotcha!" 
     break 
+0

Спасибо, я попробую ваш код. Но странная вещь (для меня) заключается в том, что сон (1) работает с IE, при навигации по другим URL-адресам, исключая hotfile.com ... –

+0

Вероятно, это проблема времени, и никогда не стоит полагаться на выбор времени вопросы. –

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