请帮助我使用Python 2.6和win32com。
我是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)
..........................
但是当我更改网址时,例如'yahoo.com' -
没有错误。
如何检查ReadyState可能依赖于url ??
答案 0 :(得分:1)
睡眠技巧不适用于IE。实际上你需要在等待时抽取信息。顺便说一句,我认为一个线程不会起作用,因为IE讨厌不在GUI线程中。
这是一个基于ctypes的消息泵,通过它我可以为“hotfile.com”和“yahoo.com”获得4 ReadyState。它会提取当前队列中的所有消息,并在运行检查之前对其进行处理。
(是的,这很毛茸茸,但你可以把它塞进“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