BLOG
Wissenstransfer von IT-Spezialisten

PowerShell Exception 0x800A01B6 bei der Verwendung von getElementsByTagName, getElementsByName oder getElementByID

Um die Skalierung einer Web-App auf Microsoft Azure zu testen, nutze ich für automatisierte Webzugriffe das com-Objekt „InternetExplorer.Application“. Damit lässt sich der Internet Explorer in mehreren Instanzen automatisieren.

1
2
3
4
5
6
7
8
$xe = New-Object -com "InternetExplorer.Application"
$xe.visible = $true
$xe.silent = $true
$xe.Navigate($IURL)
while ($xe.Busy) {
    [System.Threading.Thread]::Sleep(10)
}

Mit $xe.Document.getElementsByTagName(„Input“) enumerierte man die verschiedenen Eingabefelder und Buttons der dargestellten Webseite. Dies funktioniert nach der ersten Navigation zuverlässig – aber nicht mehr, wenn nach einer zweiten Navigationsanweisung der Befehl für den neuen Content erneut ausgeführt wird:

1
2
3
4
5
6
Ausnahme von HRESULT: 0x800A01B6
In Zeile:1 Zeichen:1
+ $xe.Document.getElementsByTagName("Input")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], NotSupportedException
    + FullyQualifiedErrorId : System.NotSupportedException

Workaround:

Verwendung der folgenden Methoden, anstatt die originären zu verwenden:

1
2
3
IHTMLDocument3_getElementsByTagName
IHTMLDocument3_getElementsByName
IHTMLDocument3_getElementByID

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$xe = New-Object -com "InternetExplorer.Application"
$xe.visible = $true
$xe.silent = $true
 
$xe.Navigate($IURL)
while ($xe.Busy) {
    [System.Threading.Thread]::Sleep(10)
}
$xe.Document.IHTMLDocument3_getElementsByTagName("Input")
$xe.Navigate($IURL2)
while ($xe.Busy) {
    [System.Threading.Thread]::Sleep(10)
}
$xe.Document.IHTMLDocument3_getElementsByTagName("Input")