none
IE document.links property fehlt??? RRS feed

  • Frage

  • Hi,

    ich habe ein 64-Bit Win7 System auf dem es ein PS Script gibt, welches auf die document.links property des IE Objects angewiesen ist. Jetzt möchte ich das Script auf ein 32-Bit Win7 System ausführen, doch die documents.link property fehlt. Beide haben die neusten Updates, beides sind Professional Versionen (eines is N (Mediaplayer)) und beide haben die selbe Version/Build des IEs.

    Ich habe es auch auf einem WinXP System mit SP3 probiert. Auch dort geht es nicht.

    Ich hoffe ihr könnt mir helfen. Es ist mir ein Rätsel.

    Dienstag, 15. Februar 2011 20:17

Antworten

  • Es scheint ein Problem mit 32-Bit Systemen zu sein. Ich bin Systemadministrator und habe es heute auf allen Systemen probiert, wo man mich raufgelassen hat. Es funktioniert nur unter Win7 64-Bit.

    Die andere Systeme laden aus irgendeinem Grund die "mshtml.HTMLDocumentClass" nicht.

    Ist (mir) aber egal weil es auch so klappt:

    $InternetExplorer.Document.getElementsByTagName("a") | select-object href

    • Als Antwort markiert FMHGH Mittwoch, 16. Februar 2011 15:27
    Mittwoch, 16. Februar 2011 15:26

Alle Antworten

  • Poste doch bitte mal das Script.

    Grüße, Denniver

    Dienstag, 15. Februar 2011 20:24
    Moderator
  • Ui, das ist fast 500 Zeilen lang. Aber als Beispiel:

     

    $InternetExplorer = New-Object -com InternetExplorer.Application
    $InternetExplorer.Visible = $True
    $InternetExplorer.Navigate("www.google.de")
    $InternetExplorer.Document.links | select-object href

    Ergebniss: eine Liste mit links

    href
    ----
    http://www.google.de/imghp?hl=de&tab=wi
    http://video.google.de/?hl=de&tab=wv
    ...

    Und "$InternetExplorer.Document.links" gibt es bei mir nur auf dem 64-Bit Win7 PC. Wenn ich die Befehle auf den anderen PCs ausführe, passiert nichts.

    Dienstag, 15. Februar 2011 20:37
  • Achso. Die Einstellungen der IEs, Sicherheit, usw. sind exakt die selben.
    Dienstag, 15. Februar 2011 20:44
  • Funktioniert bei mir sowohl bei einem W7 32bit als auch 64bit wunderbar. Der Trick ist, vor dem Abruf der Links eine kleine Pause einzufügen. Ich nehme an, der IE benötigt einen Moment um die Seite zu laden, die Abfrage erfolgt aber schon voher und scheitert dann manchmal, je nach System und Netzgeschwindigkeit.

    $InternetExplorer = New-Object -com InternetExplorer.Application
    $InternetExplorer.Visible = $True
    $InternetExplorer.Navigate("www.google.de")
    sleep 5
    $InternetExplorer.Document.links | select-object href
    
    

    Ich habe mal 5 Sekunden eingefügt, das ist recht lang. Musst du je nach System anpassen.

    Grüße, Denniver

    Dienstag, 15. Februar 2011 21:04
    Moderator
  • Mach ich:

    function WaitForStatusReady{
    	do{
    		if($InternetExplorer.StatusText -ne $Temp_StatusText){
    			$Temp_StatusText = $InternetExplorer.StatusText
    			if(!($Temp_StatusText)){
    				$Temp_StatusText = " "
    			}
    			if($InternetExplorer.busy -eq $True){
    				write-progress -Activity ("Busy - "+$InternetExplorer.LocationURL) -Status $Temp_StatusText -ID 1
    			}
    			else{
    				write-progress -Activity $InternetExplorer.LocationURL -Status $Temp_StatusText -ID 1
    			}
    		}
    	}while($InternetExplorer.ReadyState -ne 4)
    	$Host.UI.RawUI.ForegroundColor = "green"
    	write-host ("URL: "+$InternetExplorer.LocationURL)
    	MySleep
    }
    
    Dienstag, 15. Februar 2011 21:12
  • Das ist in der Tat kurios. Ich habe es jetzt zusätzlich auf zwei W7 32bit Systemen getestet, auf dem einen geht es und auf dem anderen nicht. Letzteres ist allerdings eine lange nicht mehr gepachte VM. Auf einem Server 2008 geht es darüber hinaus aber auch nicht.

    Ich kann mir das nur so erklären, das es trotzdem bei einer zugehörigen dll einen Versionsunterschied gibt, oder sich schlicht um einen Bug handelt. Daher kann ich dir nur empfehlen das nochmal im IE-Forum zu posten oder direkt einen Bug zu melden .

    Als kurzfristiger Workaround fällt mir spontan nur ein, die Links direkt als Text aus der html-Datei zu extrahieren. Wenn es sich um eine fehlerfreie HTML-Datei mit geschlossenen Tags handelt, ginge auch XML. Ist nicht so elegant, sollte aber funktionieren.

    Grüße, Denniver

    Dienstag, 15. Februar 2011 21:44
    Moderator
  • Ich werde mal das andere Forum probieren und eine Lösung ggf. hier posten.

    Da wo es nicht geht fehlen mir 377 properties und methods ($InternetExplorer.documents | gm | measure-object).

    Dienstag, 15. Februar 2011 22:01
  • Es scheint ein Problem mit 32-Bit Systemen zu sein. Ich bin Systemadministrator und habe es heute auf allen Systemen probiert, wo man mich raufgelassen hat. Es funktioniert nur unter Win7 64-Bit.

    Die andere Systeme laden aus irgendeinem Grund die "mshtml.HTMLDocumentClass" nicht.

    Ist (mir) aber egal weil es auch so klappt:

    $InternetExplorer.Document.getElementsByTagName("a") | select-object href

    • Als Antwort markiert FMHGH Mittwoch, 16. Februar 2011 15:27
    Mittwoch, 16. Februar 2011 15:26