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: 0x800A01B6In 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") |