10

我想自动化 Internet Explorer 8(在 Windows 7 上使用 python 2.7)机器。这是我在 SO 上找到帖子后的代码:

import sys, time
from win32com.client import WithEvents, Dispatch
import pythoncom
import threading    

stopEvent=threading.Event()

class EventSink(object): 
    def OnNavigateComplete2(self,*args):
        print "complete",args
        stopEvent.set()



def waitUntilReady(ie):
    if ie.ReadyState!=4:
        while 1:
            print "waiting"
            pythoncom.PumpWaitingMessages()
            stopEvent.wait(.2)
            if stopEvent.isSet() or ie.ReadyState==4:
                stopEvent.clear()
                break;   

if __name__ == '__main__':
    time.clock()
    ie=Dispatch('InternetExplorer.Application',EventSink)
    ev=WithEvents(ie,EventSink)       
    ie.Visible=True
    ie.AddressBar = True
    ie.Navigate("http://www.sap.com/austria/index.epx")
    waitUntilReady(ie)

我收到以下关于http://www.sap.com/austria/index.epx的错误消息:

waiting
waiting
Traceback (most recent call last):
  File "C:\Users\w\My Documents\Aptana Studio 3 Workspace\MyApp\src\GoToIdeaWindow.py", line 41, in <module>
    waitUntilReady(ie)
  File "C:\Users\w\My Documents\Aptana Studio 3 Workspace\MyApp\src\GoToIdeaWindow.py", line 26, in waitUntilReady
    if stopEvent.isSet() or ie.ReadyState==4:
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 463, in __getattr__
    return self._ApplyTypes_(*args)
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 456, in _ApplyTypes_
    self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147417848, 'The object invoked has disconnected from its clients.', None, None)

该代码适用于例如 google.com 或 bbc.com。有人知道可能是什么原因吗?

4

4 回答 4

12

在 IE9 上,您需要降低安全设置以使脚本正常工作:

IE9 -> Internet Options -> Security -> Trusted Sites    : Low
IE9 -> Internet Options -> Security -> Internet         : Medium + unchecked Enable Protected Mode
IE9 -> Internet Options -> Security -> Restricted Sites : unchecked Enable Protected Mode
于 2011-07-13T09:04:08.260 回答
2

哇。我一直在使用一个运行了 3 天的脚本,试图弄清楚为什么它甚至没有到达第 10 行。Microsoft 一直在整个组织内悄悄地将 Internet Explorer 自动更新到 IE10,这给 CRM 开发人员带来了极大的麻烦。我现在注意到设置已重置为默认值并且已打开保护模式。

在开发站点时可以尝试的最有用的事情之一是按 F12 并将 IE 版本设置为其他版本。例如,您的网站曾经在 IE9 中运行,但在 10 中中断。这允许您运行 IE10 并在多个版本中测试您的代码。我仍在尝试找到一种方法来强制某些网站在特定版本的 Internet Explorer 中打开,而不必每次都按 F12。

于 2013-06-01T13:47:40.077 回答
2

我无法更改我的 ie 安全设置,但我找到了另一种适用于 vbscript 的解决方案(不要问我为什么要使用它:D)!

http://go-gaga-over-testing.blogspot.co.uk/2013/06/the-object-invoked-has-disconnected.html

  Set ie = WScript.CreateObject("InternetExplorer.Application")

  With ie
       hwnd = .hwnd
       .Navigate theURL
  End With

  Set oShell = CreateObject("Shell.Application")

  For Each Wnd In oShell.Windows
         If hwnd = Wnd.hwnd Then Set ie = Wnd
  Next 
于 2016-03-12T12:19:00.077 回答
0

我有一些类似的问题,我所做的是(但是它在 C#.NET 中使用 mshtml 和 SHDocVw):

  • 降低了 Internet Explorer 中的安全性(在 Internet 选项的安全选项卡中)级别(就像您 @Skarab 尝试过的那样),
  • 将 Internet Explorer 变量初始化为空值,例如:

    /*INITIALIZE THE BROWSER VARIABLE TO NULL VALUE*/
    SHDocVw.InternetExplorer ie =null;
    ie = new SHDocVw.InternetExplorer();
    

希望这可以帮助...

于 2013-10-14T14:23:00.107 回答