问题
I would like to automate Internet Explorer 8 (using python 2.7 on Windows 7) machine. Here is my code after a post found on 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)
I got the following error message for 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)
The code works perfectly for, e.g., google.com or bbc.com. Does anybody know what could be a reason?
回答1:
On IE9, you need to lower security settings to make the script work:
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
回答2:
Wow. I have been fighting with a script that was working for 3 days trying to figure out why it did not even reach the 10th line. Microsoft has been auto-updating Internet Explorer silently to IE10 throughout our organisation and it has caused major headaches for the CRM developers. I noticed now that the settings has been reset to default and that protected mode has been turned on.
One of the most useful things you can try while developing your site is pushing F12 and setting the IE version to other versions. For example, your site used to work in IE9 but broke in 10. This allows you to be running IE10 and test your code in multiple versions. I am still trying to find a way to force certain websites to open in specific versions of internet explorer without having to push F12 every time.
回答3:
I could not change my ie security setting but i found another solution that works in vbscript (dont ask me why i am using that :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
回答4:
I had somewhat similar issue, what I did was (however it was using mshtml and SHDocVw in C#.NET):
- Lowered the security (in security tab of Internet options) levels in internet explorer (just as you @Skarab had tried doing) ,
Initialized internet explorer variable to a null value like:
/*INITIALIZE THE BROWSER VARIABLE TO NULL VALUE*/ SHDocVw.InternetExplorer ie =null; ie = new SHDocVw.InternetExplorer();
hope this helps...
来源:https://stackoverflow.com/questions/6661005/error-the-object-invoked-has-disconnected-from-its-clients-automate-ie-8-wit