2011-07-12 86 views
9

Chciałbym zautomatyzować program Internet Explorer 8 (przy użyciu Pythona 2.7 na Windows 7). Tu jest mój kodu po a post found on SO:Błąd "Wywołany obiekt odłączył się od swoich klientów" - zautomatyzować IE 8 za pomocą pythona i win32com

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) 

mam następujący komunikat o błędzie dla 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) 

Kod działa doskonale do, na przykład, google.com lub bbc.com. Czy ktoś wie, co może być powodem?

+0

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

Odpowiedz

10

Na IE9, trzeba obniżyć poziom zabezpieczeń, aby prace skryptu:

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 
+0

Dziękuję. Przez ponad dwa dni łamałem sobie głowę tym problemem na IE-11, a to proste ustawienie rozwiązało! – user2979010

2

Wow. Walczyłem ze skryptem, który działał przez 3 dni, próbując zrozumieć, dlaczego nie dotarł do dziesiątej linii. Firma Microsoft automatycznie aktualizowała program Internet Explorer w trybie cichym do IE10 w całej naszej organizacji i spowodowała poważne problemy dla programistów CRM. Zauważyłem, że ustawienia zostały zresetowane do domyślnych i włączony jest tryb chroniony.

Jedną z najbardziej przydatnych rzeczy, które można wypróbować podczas tworzenia witryny, jest naciśnięcie klawisza F12 i ustawienie wersji IE na inne wersje. Na przykład Twoja strona działała w IE9, ale zerwana w 10. Pozwala to na uruchamianie IE10 i testowanie kodu w wielu wersjach. Nadal staram się znaleźć sposób, aby zmusić niektóre witryny do otwarcia w określonych wersjach przeglądarki internetowej bez konieczności wciskania F12 za każdym razem.

+1

Możesz powiedzieć IE, aby używał konkretnej wersji ze znacznikiem podobnym do poniższego: alanaktion

0

miałem nieco podobny problem, co zrobiłem było (choć to był przy użyciu MSHTML i SHDocVw w C# .NET):

  • Obniżono bezpieczeństwa (w karcie bezpieczeństwa opcji Internet) poziomów w Internet Explorer (tak jak @Skarab próbowała robić),
  • przygotowanej Internet Explorer zmienna wartość null jak:

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

mam nadzieję, że to pomoże ...

2

Nie mogłem zmienić mojego ustawienia np. bezpieczeństwa, ale znalazłem inne rozwiązanie, które działa w vbscript (nie pytaj mnie, dlaczego używam tego: 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 
Powiązane problemy