PowershellでIEを操作する方法
こんばんわ、きっしーです。
今日はPowershellでIEを操作する方法を紹介します。
インターネット通販等で商品を出品されている方などは、Webサイトで商品情報を入力する場合があると思います。
数商品であれば、手作業でポチポチとコピペすれば済みますが、大量の商品を出品する場合などは大変です。
ブラウザへの入力作業を自動化できたらいいですよね。それが、Powershell + IEでできちゃいます。
スクリプト
まずは、いつもの通りスクリプトから。
ここでは、IEでgoogleを開き、「運動会」で検索するスクリプトを例に挙げます。
# メイン処理
function Main($args)
{
# URLを入力する
$url = "http://www.google.co.jp"
# IEを起動する
$ie = New-Object -ComObject InternetExplorer.Application
if ($ie -ne $null)
{
# IEを表示する
$ie.Visible = $true
# URLを開く(キャッシュ無効)
$ie.Navigate($url, 4)
# Webページの読み込みが終わるまで待機する
Wait-LoadedPage $ie
# HTMLドキュメントを取得する
$doc = $ie.Document
if ($doc -ne $null)
{
# テキストボックスをIDで探し、値をセットする
$textbox =$doc.getElementById('lst-ib')
if ($textbox -ne $null)
{
$textbox.value = "運動会"
}
# 検索ボタンをNameで探し、押下する
$buttons = $doc.getElementsByName('btnK')
if ($buttons -ne $null)
{
$buttons[0].click()
}
# Webページの読み込みが終わるまで待機する
Wait-LoadedPage $ie
}
# IEを終了する
$ie.Quit()
# IEを破棄する
$ie = $null
}
}
# Webページの読み込み完了を待つ
function Wait-LoadedPage($ie)
{
# Webページの読み込みが終わるまで待機する
while ($ie.busy -or $ie.readystate -ne 4)
{
Start-Sleep -Milliseconds 100
}
}
# エントリーポイント
Main $args
スクリプトの解説
IEの起動する
IEのオブジェクトを作成するため、New-Object
を使用しています。この段階では、IEは表示されません。
IEを表示する
IEを表示するには、$ie.Visible = $true
とします。Visibleプロパティを$trueにすれば、IEが表示されます。
指定したURLを開く
指定したURLを開くには、$ie.Navigate($url, 4)
とします。4
はキャッシュなしで開くことを示しています。
Webページが読み込み完了するまで待つ
Webページが読み込み終わらないうちに、次に操作を映してしまうと、期待通りに動作しません。
Webページが読み込み完了するまで待つには、以下のようにします。
while ($ie.busy -or $ie.readystate -ne 4)
{
Start-Sleep -Milliseconds 100
}
上記コードは、IEがビジーもしくはreadystateが4 (読み込みが完了した状態)でない間、スリープするという意味になります。
ただ、このコードも完ぺきではありません。リダイレクトされた場合などは正しく動作しない可能性があります。そんな場合は、「操作したいコントロールが見つかるまでループする」などの個別に対策が必要です。
目的のコントロールを探して操作する
次に目的のコントロールを探して操作をします。
このサンプルでは、HTMLのid属性とname属性を使って目的のコントロールを探しています。
# テキストボックスをIDで探し、値をセットする
$textbox =$doc.getElementById('lst-ib')
if ($textbox -ne $null)
{
$textbox.value = "運動会"
}
# 検索ボタンをNameで探し、押下する
$buttons = $doc.getElementsByName('btnK')
if ($buttons -ne $null)
{
$buttons[0].click()
}
id属性はそのページ内で唯一であるので、コントロールを探すのに理想的です。
しかし、すべてのコントロールにid属性がついているとは限りません。そのような場合の対応方法として、name属性を使って調べる方法を記載しました。
ただし、name属性はページ内に複数存在する可能性がありますので、注意が必要です。
IEを終了し、破棄する
IEを終了する場合には、以下のようにします。
# IEを終了する
$ie.Quit()
# IEを破棄する
$ie = $null
まとめ
非常に簡単にIEを操作することができました。これでポチポチとはおさらばしましょう。
次回はExcelを操作する方法を紹介します!
追伸:
- IEはオートメーションという技術に対応しているため、Powershellから操作が可能になっています。Excelもオートメーションに対応しています。
- IE以外にChrome、Firefoxなどを操作したい場合は、Powershellでは操作が難しいです。UiPathなどの別なツールを使うと実現できます。
最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。