PowerShell で Redmine にログインして画面キャプチャを取得したのちログアウトする
特定のサイト(今回はRedmine)にログインし、キャプチャを取得したいので、PowerShellで実現してみた。
前提条件
- Windows 10 Professional
- $PSVersionTable PSVersion=5.1.15063.1387
- ファイルを選択し右クリック → PowerShell で実行
- IE のバージョンによっては保護モードを無効にする必要有り
IE_control.ps1
# IE起動 $ie = New-Object -ComObject InternetExplorer.Application $ie.Navigate("{RedmineのURL}") $ie.Visible = $true # 読込待ち while($ie.Busy) { Start-Sleep -milliseconds 100 } # ログイン $doc = $ie.Document $elements = @([System.__ComObject].InvokeMember("getElementsByName", [System.Reflection.BindingFlags]::InvokeMethod, $null, $doc, "username")) $elements[0].value = "{username}" $elements = @([System.__ComObject].InvokeMember("getElementsByName", [System.Reflection.BindingFlags]::InvokeMethod, $null, $doc, "password")) $elements[0].value = "{password}" $elements = @([System.__ComObject].InvokeMember("getElementsByName", [System.Reflection.BindingFlags]::InvokeMethod, $null, $doc, "login")) $elements[0].click() # 読込待ち while($ie.Busy) { Start-Sleep -milliseconds 100 } # リンクをクリック $as = @([System.__ComObject].InvokeMember("getElementsByTagName", [System.Reflection.BindingFlags]::InvokeMethod, $null, $doc, "a")) foreach($a in $as) { if ($a.textContent -eq "{テキスト内容}") { $a.click() break } } # 読込待ち while($ie.Busy) { Start-Sleep -milliseconds 100 } # IEをアクティブ化 Add-Type -AssemblyName Microsoft.VisualBasic $window_process = Get-Process -Name "iexplore" | Where-Object { $_.MainWindowHandle -eq $ie.HWND } [Microsoft.VisualBasic.Interaction]::AppActivate($window_process.ID) | Out-Null # キャプチャ Add-Type -AssemblyName System.Drawing $bitmap = new-object Drawing.Bitmap($ie.Width, $ie.Height) $graphics = [Drawing.Graphics]::FromImage($bitmap) $graphics.CopyFromScreen($ie.Left, $ie.Top, 0, 0, $bitmap.Size) $format = "jpeg" $fileName = "Capture_" + (Get-Date -UFormat "%Y-%m-%d %H%M%S") + ".jpg" $filePath = "C:\" + $fileName $bitmap.Save($filePath, $format) $bitmap.Dispose() # ログアウト $logout = @([System.__ComObject].InvokeMember("getElementsByClassName", [System.Reflection.BindingFlags]::InvokeMethod, $null, $doc, "logout")) $logout[0].click() # IE終了 $ie.quit()
余談
最終的に、タスクスケジューラに設定して、バックグラウンド処理として自動でキャプチャしたいが、画面描画がない状態でキャプチャしても、真っ黒な画像になるだけでした。
当然っちゃ当然ですが。