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" ) |