見出し画像

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()
}

以下参考サイトです。

以上。

この記事が気に入ったらサポートをしてみませんか?