2018年01月15日

PowerShellによるIE操作

あけましておめでとうございます。今年からブログ更新メンバになりました滝澤です。

最近のことですが
IEの操作を自動化したい!!と思うことがありました。

私の場合は、Webの管理画面のみのシステムに対して定型的なアカウント作成を実施していました。これがかなりメンドクサイ・・・。


ということで

今日は、PowerShellによるIE操作について書きたいと思います。


今回作成したスクリプトは、以下の動作をします。
 @管理画面を開く
 AID・PASSを自動入力してログイン
 B「ユーザ管理」のリンクをクリック


ポイント1

画面遷移中でオブジェクト取得に失敗することがあるため、画面遷移後は基本スリープ処理を実施。

start-sleep -milliseconds 1000

While($ie.Busy){start-sleep -milliseconds 100}


ポイント2

「id」や「name」が指定されていないsubmitボタンや、画面上に複数あるリンクの指定方法

※<input type="submit" value="ログイン" />  ←こんなの

$btn=$doc.getElementsByTagName("input") |Where-Object {$_.type -eq "submit"}


※<a href="javascript:void(0);" onclick="hogehoge">ユーザ管理</a>  ←こんなの

$btn=$doc.getElementsByTagName("a") |Where-Object {$_.outerText -eq "ユーザ管理"}


ポイント3

今回の例では使用していませんが、フレームが使用されている場合の指定方法

$iframe = $ie.Document.frames.item([ref]1).document




以下にスクリプトの全文を記載します。※青字は環境に合わせて修正してください。


# ログイン情報
$userName="hogehoge"
$userPass="password"

##################################################
### 関数定義
##################################################
function U-Login() {
    # トラップ
    try{
        $script:ie=new-object -com InternetExplorer.Application
        $ie.visible=$true
        $ie.navigate("http://hogehoge/pss/login.html")
       
        # 待ち
        While($ie.Busy){start-sleep -milliseconds 100}
        $script:doc=$ie.document
        if ($doc.url -eq "http:// hogehoge/pss/login.html") {
            Write-Debug "INFO: ログイン実行"
            $dom_userNAME=$doc.getElementById("username")
            $dom_userNAME.value=$userName
            $dom_userPASS=$doc.getElementById("password")
            $dom_userPASS.value=$userPass
            $btn=$doc.getElementsByTagName("input") |Where-Object {$_.type -eq "submit"}
            $btn.click()
            # 待ち
            While($ie.Busy){start-sleep -milliseconds 100}
            Write-Debug "INFO: ログイン完了"
        }
    }catch [Exception]{
        $Error
        Read-Host "続けるにはENTERキーを押してください"
        exit
    }
}
function U-View() {
    # トラップ
    try{
        start-sleep -milliseconds 1000
        Write-Debug "INFO: ユーザ管理 移動実行"
        $btn=$doc.getElementsByTagName("a") |Where-Object {$_.outerText -eq "ユーザ管理"}
        $btn.click()
        # 待ち
        While($ie.Busy){start-sleep -milliseconds 100}
        Write-Debug "INFO: ユーザ管理 移動完了"
    }catch [Exception]{
        $Error
        Read-Host "続けるにはENTERキーを押してください"
        exit
    }
}
##################################################
### 処理実行
##################################################
U-Login
U-View
Read-Host "続けるにはENTERキーを押してください"




如何でしょうか?
今回作成したスクリプトはログイン後にリンクをクリックするだけですが、
処理を追加することでチェックボックスやセレクトボックスの選択も可能となります。

やってみるとPowerShellも面白いものですので是非とも触ってみてください。

以上、それでは今日はこのへんで失礼します。

posted by 滝澤 at 09:00| Comment(0) | スクリプト・バッチ | このブログの読者になる | 更新情報をチェックする