Ошибка «Вызванный объект отключился от своих клиентов» - автоматизируйте IE 8 с помощью python и win32com - PullRequest
9 голосов
/ 12 июля 2011

Я бы хотел автоматизировать Internet Explorer 8 (используя python 2.7 на Windows 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 ]

11 голосов
/ 13 июля 2011

В 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
2 голосов
/ 12 марта 2016

Я не мог изменить настройки безопасности, но я нашел другое решение, которое работает в vbscript (не спрашивайте меня, почему я это использую: D)!

http://go -gaga-over-testing.blogspot.co.uk / 2013/06 /-объект вызываемого-имеет-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 
2 голосов
/ 01 июня 2013

Ничего себе. Я боролся со сценарием, который работал 3 дня, пытаясь понять, почему он даже не достиг 10-й строчки. Microsoft автоматически обновляет Internet Explorer до IE10 по всей нашей организации, и это вызывает серьезные головные боли у разработчиков CRM. Теперь я заметил, что настройки были сброшены к значениям по умолчанию и что защищенный режим включен.

Одной из самых полезных вещей, которые вы можете попробовать при разработке своего сайта, является нажатие клавиши F12 и установка версии IE на другие версии. Например, ваш сайт раньше работал в IE9, но сломался в 10. Это позволяет вам запускать IE10 и тестировать свой код в нескольких версиях. Я все еще пытаюсь найти способ заставить определенные сайты открываться в определенных версиях Internet Explorer, не нажимая F12 каждый раз.

0 голосов
/ 14 октября 2013

У меня была похожая проблема, но я использовал (но использовал mshtml и SHDocVw в C # .NET):

  • Понижены уровни безопасности (на вкладке «Безопасность» в параметрах Интернета) в Internet Explorer (так же, как вы пытались это сделать @Skarab),
  • Инициализированная переменная Internet Explorer имеет нулевое значение, например:

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

надеюсь, это поможет ...

...