PowershellでWebログイン
PowershellでInternetExplorerを起動してWebサイトにログインするスクリプトです。URL、ユーザ、パスワードは適当です。
#Web自動ログインサンプル
#変数定義
$Url = "http:hogehoge.com"
$User_Name = "hogehoge_user"
$Pass_Word = "hogehoge_passwd"
#ポップアップ処理
$wsobj = new-object -comobject wscript.shell
$result = $wsobj.popup("Start Web Access & Login ?",0,"Web Access",1)
if($result -eq 1){
# Internet Explorerを起動する。
$ie = New-Object -ComObject InternetExplorer.Application
# Internet Explorerを表示する。
$ie.Visible = $true
# Web画面へ移動する。
$ie.Navigate($Url,4)
# ページが完全に切り替わるのを待つ。
while($ie.Busy) { Start-Sleep -milliseconds 100 }
# IE画面操作を行うためのドキュメントオブジェクト取得
$doc = $ie.document
# ユーザ名入力
$idElements = $doc.getElementsByName("member_username")
# idElementsは複数取得されるので、1つしか要素がなくとも配列としてアクセスする必要がある
@($idElements)[0].value = $User_Name
# パスワード入力
$passwdElements = $doc.getElementsByName("password")
@($passwdElements)[0].value = $Pass_Word
# ボタンクリック
$inputElements = $doc.getElementsByName("login_submit")
@($inputElements)[0].click()
}
参考にさせていただいたサイト
上の方法じゃログインできないサイトがあったのでその2。これでもログイン(ってかアクセス?)できないサイトはありましたが。
# Web自動ログインサンプル2
#変数定義
$Url = "http:hogehoge.com"
$User_Name = "hogehoge_user"
$Pass_Word = "hogehoge_passwd"
#ポップアップ処理
$wsobj = new-object -comobject wscript.shell
$result = $wsobj.popup("Start Web Access & Login ?",0,"Web Access",1)
if($result -eq 1){
# シェルを取得
$shell = New-Object -ComObject Shell.Application
# IE起動
$ie = New-Object -ComObject InternetExplorer.Application
# 可視化
$ie.Visible = $true
# HWNDを記憶
$hwnd = $ie.HWND
# URLオープン(キャッシュ無効)
$ie.Navigate($Url,4)
# IE再取得
while ($ie.Document -isnot [mshtml.HTMLDocumentClass]) {
$ie = $shell.Windows() | ? {$_.HWND -eq $hwnd}
}
function OverrideMethod ([mshtml.HTMLDocumentClass]$Document) {
$doc = $Document | Add-Member -MemberType ScriptMethod -Name "getElementById" -Value {
param($Id)
[System.__ComObject].InvokeMember(
"getElementById",
[System.Reflection.BindingFlags]::InvokeMethod,
$null,
$this,
$Id
) | ? {$_ -ne [System.DBNull]::Value}
} -Force -PassThru
$doc | Add-Member -MemberType ScriptMethod -Name "getElementsByClassName" -Value {
param($ClassName)
[System.__ComObject].InvokeMember(
"getElementsByClassName",
[System.Reflection.BindingFlags]::InvokeMethod,
$null,
$this,
$ClassName
) | ? {$_ -ne [System.DBNull]::Value}
} -Force
$doc | Add-Member -MemberType ScriptMethod -Name "getElementsByTagName" -Value {
param($TagName)
[System.__ComObject].InvokeMember(
"getElementsByTagName",
[System.Reflection.BindingFlags]::InvokeMethod,
$null,
$this,
$TagName
) | ? {$_ -ne [System.DBNull]::Value}
} -Force
return $doc
}
$document = OverrideMethod($ie.Document)
# ユーザ名入力
$idElements = $document.getElementsByName("member_username")
# idElementsは複数取得されるので、1つしか要素がなくとも配列としてアクセスする必要がある
@($idElements)[0].value = $User_Name
# パスワード入力
$passwdElements = $document.getElementsByName("password")
@($passwdElements)[0].value = $Pass_Word
#ボタンクリック
$button = $document.getElementsByName("login_submit")
@($button)[0].click()
}
以下参考サイトです。
以上。