はじめに
コジマです。
PowerShellにSelenium入れてみたので、せっかくなので業務効率化したいと思ってやってみました。
きっかけ
業務で日々チケットの管理をしているのですが、契約のあれこれなどで
やるべきチケットの一覧をbacklogの検索機能だけで絞れなくなってしまったんですよね。
Excelにまとめていた課題キーの一覧からチケットのステータスをまとめて取得したいなと思ったわけです。
前提条件
- OSはWin10
- PowerShell 5.1
- Seleniumが導入済であること
PowerShellのバージョンは$PSVersionTableで取得できます。
PS C:\test> $PSVersionTable Name Value ---- ----- PSVersion 5.1.18362.752 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.18362.752 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
作ったコード
# ドライバの設定 $Driver = Start-SeChrome # URLの設定 $Url = "https://[ドメイン名]/projects/[プロジェクト名]" # ブラウザの起動 Enter-SeUrl $Url -Driver $Driver # ログイン画面 # ユーザーID $UserId = Find-SeElement -Driver $Driver -Id "userId" $UserId.SendKeys("[ログインするユーザー名]") # パスワード $UserId = Find-SeElement -Driver $Driver -Id "password" $UserId.SendKeys("[ログインするパスワード]") # ログインする $LogIn = Find-SeElement -Driver $Driver -Id "submit" $LogIn.Click() # Excel読み込みたいね $KeyList = @( # 各々お好みで ) # URLの設定 $BaseUrl = "https://[ドメイン名]/view/[プロジェクト名]-" # 書き出すファイル名 $FileName = "ステータス一覧.txt" #urlに片っ端からアクセスする foreach($Key in $KeyList){ # URLの作成 $AccessUrl = $BaseUrl + $Key Enter-SeUrl $AccessUrl -Driver $Driver # タイトル $Title = Find-SeElement -Driver $Driver -ClassName "title-group__title-text" # ステータス $Status = Find-SeElement -Driver $Driver -ClassName "status-label" $OutText = [string]$Key + ":" + $Title.Text + ":" + $Status.Text Write-Output $OutText | Add-Content $FileName -Encoding Default # 1秒待つ(負荷防止) Start-Sleep 1 }
課題キー:課題名:ステータス
課題キー:課題名:ステータス
課題キー:課題名:ステータス
・・・
って感じに出力を得ることができます。
超重要なのですが、Seleniumでループ処理を実行する際は必ずスリープを入れてください。
サーバーに負荷がかかっちゃうからね!
改善点
とりあえず取れるようにはなりましたが、まだやりたいことがあって、
- 管理してるExcelを読み込んで課題キーを取得する
- 出力ファイルをCSVにする
- ファイル名にタイムスタンプを入れる
とかね。
さいごに
業務効率化って面白いですよ。
今まで退屈に時間が過ぎてくものが一瞬で終わらせられたりしますからね。
浮いた時間でいろんなことできるし。
楽するために苦労するのがエンジニアだと自分は思っています。
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
以上、コジマでした。