Help us understand the problem. What is going on with this article?

PowerShellからIEを操作

More than 3 years have passed since last update.

環境

  • 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 でデフォルトの保存フォルダに保存

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away