LoginSignup
49

More than 5 years have passed since last update.

PowerShellからIEを操作

Posted at

環境

  • Windows7
  • IE11

IE起動

#######################
# IE起動と画面表示
#######################
$ie = New-Object -ComObject InternetExplorer.Application  # IE起動
$ie.Navigate("hogehoge.ne.jp")                            # URL指定
$ie.Visible = $true                                       # 表示

入力

  • IEを起動してWindowsセキュリティ認証のダイアログが起動した際にうまい操作方法がわからなかったので直接キー入力でどうにかする
[System.Windows.Forms.SendKeys]::SendWait("%({TAB})")     # Ctrl + Tab でIEの認証ダイアログをアクティベート
Start-Sleep -s 1                                          # インターバル
[System.Windows.Forms.SendKeys]::SendWait("userid")        # アカウント入力
[System.Windows.Forms.SendKeys]::SendWait("({TAB})")      # Tab で次項目(パスワード)へ移動
Start-Sleep -s 1                                          # インターバル
[System.Windows.Forms.SendKeys]::SendWait("password")         # パスワード入力
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")      # Enter 入力

コンテンツロード待ち

#######################
# ブラウザ上のコンテンツロード完了待ち
#######################
While($ie.Busy)
{ Start-Sleep -s 1 }                                      #IE画面のロードが完了するまで、1秒待機をループ

画面操作

  • 要素を取得したり値を入力したりクリックしたり
# 画面情報取得
$doc = $ie.Document

# 要素取得
$element = [System.__ComObject].InvokeMember(
            "getElementById"                                  # 指定方法にIDを使用
            ,[System.Reflection.BindingFlags]::InvokeMethod     # おまじない
            , $null                                             # 不要パラメータ
            , $doc                                              # ページ情報オブジェクト
            , "srchtxt"                                         # ID名
            )
# 値入力
$element.value = "hogehoge"


# 要素取得
$element = [System.__ComObject].InvokeMember(
            "getElementById"                                  # 指定方法にIDを使用
            ,[System.Reflection.BindingFlags]::InvokeMethod     # おまじない
            , $null                                             # 不要パラメータ
            , $doc                                              # ページ情報オブジェクト
            , "srchbtn"                                         # ID名
            )
# クリック
$element.click()

########################################
# ↑ではIdからの取得だが、
# Tag(ボタンとか)やClassからの取得の場合
########################################
$element = [System.__ComObject].InvokeMember(                   # 要素の取得 (特定のリンクを取得)
             "getElementsByTagName"                             # 指定方法にClassを使用
            ,[System.Reflection.BindingFlags]::InvokeMethod     # おまじない
            , $null                                             # 不要パラメータ
            , $doc                                              # ページ情報オブジェクト
            , "input"                                           # Class名
            )| ? { $_.name -eq "commit" }

$element = $ie.Document.getElementsByTagName('A') |
                where-object {
                    $_.innerText -eq 'いんなーテキスト'
                }

保存

  • IEの通知バーが出た時に保存
  • これも、いけてる方法がわからなかったので直接キー入力
[System.Windows.Forms.SendKeys]::SendWait("%({S})")     # Alt + S でデフォルトの保存フォルダに保存

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49