【Powershell】Webサイトへの自動ログインと簡単な処理の実行

金融

※2021/08/07 追記 参考プログラムを最新化しました

こんにちは!ぼくまです!

パソコンで行う日々の作業の中で、「これって自動化出来たらいいなー」と思うことはよくあると思います。

実はWebサイトへログインや簡単な操作の自動化ならば、特別なソフト等はなくともWindowsの標準機能であるPowershellのプログラムを使うことで簡単に行うことができちゃうんです!

今回はSBI証券へのログインとIPO申込をワンクリックで自動化する方法を公開しますので、是非自動化の参考にしてみてくださいね。

また、本記事ではプログラムの内容などは説明せずにプログラムの動かし方を説明します。以下の記事で処理の大まかな流れや作成方針を記載しているので是非こちらもご覧ください。

動作環境

私は以下の環境で動作を確認しています。バージョンが異なる際は正常に動作しない可能性があるのでご注意ください。

  • Windows10
  • Internet Explorer 11
  • PowerShell 5.1

手順

自動化を行うには以下の5つのステップを実行します。

プログラムをメモ帳に張り付ける

本記事の最後に「自動申込プログラム」がありますので、パソコンでメモ帳を開いてプログラムをすべてコピペしてください。

この時ちゃんと最初の行から最後の行まで張り付けてあるか余計な文字が混入していないか確認してくださいね!

ログイン情報をプログラムに記載する

プログラムの最初の方にユーザ名やパスワードを記入する部分があります。

ここを自分の情報に変更してください。

# ユーザーネーム
$user_id = "xxx-xxxxxxx"

# パスワード
$user_pw = "password"

# 取引パスワード
$tr_pass = "password"

# 取引残高
$balance = 100000

例えば以下のように変更します。

# ユーザーネーム
$user_id = "123-4567891"

# パスワード
$user_pw = "asdfghj"

# 取引パスワード
$tr_pass = "pw12345"

# 取引残高
$balance = 5000000

プログラムを保存する

ログイン情報を記載したら「名前を付けて保存」で好きな場所にプログラムを保存してください。

この時に以下のようにファイル名や設定を行います。

ファイルの名前と設定

ファイル名:<任意の名前>.ps1
ファイルの種類:すべてのファイル(*.*)
文字コード:UTF-8(BOM付き)

私は「sbiipo.ps1」とファイル名を付けていますよ!

プログラムのショートカットを作成する

作成したファイルを選択し、右クリックから「ショートカットの作成(S)」を選択するとファイルのショートカットが作成されます。

次に作成されたショートカットを選択し、右クリックから「プロパティ(R)」を選択します。

開いたプロパティの「リンク先(T):」にプログラムの場所が記載されていると思うので、その先頭に以下の文字列を追加します。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File

私の場合は以下のようになりました。

追加前

C:\Users\user\Documents\sbiipo.ps1

追加後

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File C:\Users\user\Documents\sbiipo.ps1

「~ -File C:~」の部分のFileとCの間に半角スペースがあることに注意してください

追加したら「OK」を押してプロパティを閉じます。

ショートカットを実行する

作成したショートカットをダブルクリックすると黒いコンソール画面とIEが立ち上がり、自動で処理が開始されます。

しばらく待っていると黒いコンソール画面とIEが自動で閉じるので、そうなったら自動申込は完了です。

一度ショートカットの作成が完了したら、次からはこのショートカットを実行するだけです。

念のため最初の何回かはSBI証券のIPO画面で確認して、実行後に正しく申込が行われているかみてくださいね!

注意点

以下は本手順を実行する際の注意点です。よくお読みになってからご使用ください。

  • 当プログラムは自己責任で使用をお願いします。当サイトはプログラムを使用することで被ったいかなる損害についても一切責任を負いません。
  • 使用する環境によっては正常に動作しない可能性がございます。そのような場合でも個別対応は行いませんのでご了承ください。
  • 正常に動作していた場合でもWindowsアップデート等の影響により、当プログラムが動作しなくなる場合がございます。
  • 当プログラムを連続で実行することはご遠慮ください。

自動申込プログラム

#=======================================================
# 処理概要
#=======================================================

# 未申し込みの銘柄すべてに申込実施
# 申込単位は100株単位
# 設定された取引残高の範囲内でなるべく多くの株数を申し込む

#=======================================================
# ログイン情報(★4つの情報を自分のものに置き換える)
#=======================================================

# ユーザーネーム
$user_id = "xxx-xxxxxxx"

# パスワード
$user_pw = "password"

# 取引パスワード
$tr_pass = "password"

# 取引残高
$balance = 100000

#=======================================================
# 処理に必要な変数を定義
#=======================================================

# SBI証券のURL
$url_main = "https://www.sbisec.co.jp/ETGate"
$url_ipo = "https://site2.sbisec.co.jp/ETGate/" `
 + "?OutSide=on&_ControlID=WPLETsmR001Control" `
 + "&_DataStoreID=DSWPLETsmR001Control&sw_page=Offer&cat1=home" `
 + "&cat2=none&getFlg=on&sw_param1=21&sw_param2="

#=======================================================
# IEの準備
#=======================================================

# IEを開く
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible=$true


#=======================================================
# SBI証券トップページの読み込み
#=======================================================

# SBI証券のトップページに移動
$ie.Navigate($url_main)

# IEの読み込み待ち
while ($ie.busy -or $ie.readystate -ne 4)
{
  Start-Sleep -Milliseconds 100
}
Start-Sleep -Milliseconds 1000

# トップページの読み込み
$doc = $ie.document

#=======================================================
# ログイン処理
#=======================================================

# ユーザーネーム入力
$dom_userID = $doc.IHTMLDocument3_getElementsByName("user_id")
$dom_userID[0].value=$user_id

# パスワード入力
$dom_userPW = $doc.IHTMLDocument3_getElementsByName("user_password")
$dom_userPW[0].value=$user_pw

# ログインボタンをクリック
$btn=$doc.IHTMLDocument3_getElementsByName("ACT_login")
$btn[0].click()

# IEの読み込み待ち
while ($ie.busy -or $ie.readystate -ne 4)
{
  Start-Sleep -Milliseconds 100
}
Start-Sleep -Milliseconds 1000

#=======================================================
# IPOページの読み込み
#=======================================================

# IPOのページに移動
$ie.Navigate($url_ipo)

# IEの読み込み待ち
while ($ie.busy -or $ie.readystate -ne 4)
{
  Start-Sleep -Milliseconds 100
}
Start-Sleep -Milliseconds 1000

# IPOページの読み込み
$doc = $ie.document

#=======================================================
# 未申込の銘柄の申込を実施
#=======================================================

# 申込ボタンのリンク先を取得
$no_moshikomi = $doc.IHTMLDocument3_getElementsByTagName("a") | Where-Object { $_.innerHTML -eq '<img alt="申込" src="//sbisec.akamaized.net/v3/images/common/trading/b_ipo_moshikomi.gif">' } | Select-Object href

# 未申込の銘柄すべてに対してなるべく多くの株数を申し込む
$no_moshikomi | ForEach-Object{
  # リンク先のページに移動
  $ie.Navigate($_.href)

  # IEの読み込み待ち
  while ($ie.busy -or $ie.readystate -ne 4)
  {
    Start-Sleep -Milliseconds 100
  }
  Start-Sleep -Milliseconds 1000

  # リンク先のページを読み込み
  $doc = $ie.document
  
  # 仮条件の最大値を取得
  $max_price = $doc.IHTMLDocument2_body.innerHTML  | Select-String '円&nbsp;~&nbsp;(?<max>.*?)&nbsp;円' | % { $_.Matches.Groups[1].value}
  
  # 購入数を計算(以下計算で取引残高で買える最大数を100株単位で計算)
  # 取引残高÷最大値 を求めた後に100以下を切り捨て
  $suryo = [Math]::floor(($balance / $max_price) / 100) * 100
  
  # 購入数を入力
  $dom_suryo = $doc.IHTMLDocument3_getElementsByName("suryo")
  $dom_suryo[0].value=[string]$suryo
  
  # 購入価格を入力(ストライクプライス)
  $dom_strPriceRadio = $doc.IHTMLDocument3_getElementById("strPriceRadio")
  $dom_strPriceRadio.checked="True"
  
  # IPOチャレンジポイントを設定(使用しない)
  $dom_ipoNotUse = $doc.IHTMLDocument3_getElementById("ipoRadio1")
  $dom_ipoNotUse.checked="True"
  
  # 取引パスワードの入力
  $dom_tr_pass = $doc.IHTMLDocument3_getElementsByName("tr_pass")
  $dom_tr_pass[0].value=$tr_pass

  # 申込確認ボタンをクリック
  $dom_order_kakunin = $doc.IHTMLDocument3_getElementsByName("order_kakunin")
  $dom_order_kakunin[0].click()

  # IEの読み込み待ち
  while ($ie.busy -or $ie.readystate -ne 4)
  {
    Start-Sleep -Milliseconds 100
  }
  Start-Sleep -Milliseconds 1000
  
  # 確認ページを読み込み
  $doc = $ie.document
  
  # 申込ボタンをクリック
  $dom_order_btn = $doc.IHTMLDocument3_getElementsByName("order_btn")
  $dom_order_btn[0].click()
 }

#=======================================================
# IEを閉じる
#=======================================================

$ie.Quit()

コメント

タイトルとURLをコピーしました