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

PowerShellでWebサイトの入力項目をname属性で操作する

More than 3 years have passed since last update.

はじめに

Webブラウザに入力する作業を自動化したい!!
でも、端末にSeleniumDriverインストールできない。
という環境で、PowerShellを利用して自動化を実現しました。

やりたいこと

  1. 所定のWebサイトを開く。
  2. IDとパスワードを入力する。
  3. ボタンを押す。

環境

  • Windows7
  • Internet Explorer11
  • PowerShell2.0

操作対象Webサイト

操作対象のWebサイト(sample1.html)は、IDとパスワードと画面遷移用のボタンがあるシンプルな構成です。
ただ、すべてのタグにID属性が付いていません…

sample1.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>PowerShellからWebサイト操作</title>
    </head>
    <body>
        <form name="auth" method="post" action="./sample2.html">
            認証ID:<input type="text" name="auth_id" value=""><br>
            認証パスワード:<input type="password" name="auth_password" value=""><br>
            <input type="submit" value="認証">
        </form>
    </body>
</html>

PowerShellコード

Webサイトを操作するためのPowerShellのコードです。
ポイントは、getElementsByNameで取得したオブジェクトは配列としてアクセスしなければならない点です。
ID属性があれば、getElementByIdでオブジェクト取得できます。

sample.ps1
# Internet Explorerを起動する。
$ie = New-Object -ComObject InternetExplorer.Application

# Internet Explorerを表示する。
$ie.Visible = $true

# Web画面へ移動する。
$ie.Navigate('.\sample1.html')

# ページが完全に切り替わるのを待つ。
while($ie.Busy) { Start-Sleep -milliseconds 100 }

# IE画面操作を行うためのドキュメントオブジェクト取得
$doc = $ie.document

# ID入力
$idElements = $doc.getElementsByName("auth_id")
# idElementsは複数取得されるので、1つしか要素がなくとも配列としてアクセスする必要がある
@($idElements)[0].value = "あいでぃ"

# パスワード入力
$passwdElements = $doc.getElementsByName("auth_password")
@($passwdElements)[0].value = "パスワード"

# ボタンクリック(IDもNameもないので、valueで判定)
$inputElements = $doc.getElementsByTagName("input")
Foreach($inputElement in $inputElements) {
    if ($inputElement.value -eq "認証") {
        $inputElement.click()
    }
}

おわりに

今回はじめてPowerShell周りを調べてみたのですが、色々できて楽しいですね。
Windows10からはBash on WindowsでBash書けるようになるようですので、単純な繰り返し作業はどんどんShellScript化していきたいです。

参考サイト

http://stackoverflow.com/questions/28816216/powershell-programatically-set-input-field-by-name-in-ie

akrmsd
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
No 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
ユーザーは見つかりませんでした