2016年4月15日金曜日

PowerShell readyState

今まで、IEの起動から操作までを下のコードを書いていた。

    $ie=new-object -com InternetExplorer.Application
    $ie.visible=$true
    $ie.navigate("https://www.google.co.jp")
    while($ie.Busy) { [Threading.Thread]::Sleep(300) }

ふと、気づくと、IEがちゃんとアクティブになっているのに、「$ie.busy」が、Falseだった。

ちょっと、調べてみたら、こんなのがあった。

   readyState
   #   0・・・初期化未完了状態(READYSTATE_UNINITIALIZED)
   #   1・・・ロード中状態(READYSTATE_LOADING)
   #   2・・・ロード完了状態(READYSTATE_LOADED)
   #   3・・・操作可能状態(READYSTATE_INTERACTIVE)
   #   4・・・全データ読込完了状態(READYSTATE_COMPLETE)

こんなコードにしてみた。

  $ie=new-object -com InternetExplorer.Application
    $ie.visible=$true
    Write-debug  " After visible ReadyState"
    Write-debug  $ie.readyState

    $ie.navigate("https://www.google.co.jp")
    Write-debug  " After navigate ReadyState"
    Write-debug  $ie.readyState


    for($timecnt = 0 ;$timecnt -lt 5 ;$timecnt++)
    {
        Start-Sleep -s 1
        if( $ie.readyState -eq 4 )
        {
            Write-debug "B"
            Write-debug  $ie.readyState
            Write-debug $ie.Busy

            break;
        }
        Write-debug "A"
        Write-debug  $ie.readyState
        Write-debug $ie.Busy
    }
    Write-debug "C"
    Write-debug  $ie.readyState
     Write-debug $ie.Busy

実行結果

デバッグ:  After visible ReadyState
デバッグ: 0
デバッグ:  After navigate ReadyState
デバッグ: 1
デバッグ: B
デバッグ: 4
デバッグ: False
デバッグ: C
デバッグ: 4
デバッグ: False

本日の河上選手:お休み
  22日 ~  常滑