2017-10-07 9 views
0

PowerShellは:要素がWebページに存在するかどうかをテストし、私は要素がWebページに存在するかどうかを見つけるためにしようとしています

$ie = New-Object -com InternetExplorer.Application 
$ie.visible = $true 
$ie.Navigate("http://10.0.0.1") 
BrowserReady($ie) # wait for page to finish loading 
if ($ie.Document.getElementById("admin")) { 
    $ie.Document.getElementById("admin").value = "adminuser" 
} 
etc, etc 

(はい、それは要素を含んでいないようにhttp://10.0.0.1のページのために可能ですIDが「admin」で - なぜ重要ではありません)

私の問題は、5行目では、テストが正常に動作するようには思えないということである:常に要素が存在するかどうかTRUEを返します。私も試しました

if ($ie.Document.getElementById("admin") -ne $NULL) {...} 

同じ結果を得ました。

私はWindows 10システムで作業しています。何か案は?

+0

したがって、if文のテスト –

+0

D'oh!私はそれを読んでいたが、それは '存在しない' – TessellatingHeckler

答えて

1

問題はあなたの比較です。コマンド​​はDBNullで返され、それ自体はNullと等しくありません。したがって、実行するとき:

if ($ie.Document.getElementById("admin")) 
{ 
    ... 
} 

あなたはいつもTrueで返されます。次の例のように、$my_element$nullと等しくなく、そのタイプはDBNullです。

PS > $my_element = $ie.Document.getElementById("admin") 

PS > $my_element -eq $null 
False 

PS > $my_element.GetType() 

IsPublic IsSerial Name          BaseType                          
-------- -------- ----          -------- 
True  True  DBNull         System.Object 

私は、「管理者」は本当に存在するかどうかを決定するために、この比較のいずれかを使用することができことをお勧めしたい:

PS > $my_element.ToString() -eq "" 
True 

PS > [String]::IsNullOrEmpty($my_element.ToString()) 
True 

PS > $my_element.ToString() -eq [String]::Empty 
True 

比較はTrueに戻ると、それは価値がそれほどであることを意味し「admin」は存在しません。もちろん、-neを使用すると便利です。

関連する問題