概要
とある事情で毎度のことIDとPASSを入力しなければいけないサイトがある...
自動でログインをしたいが、seleniumを使うのはスマートじゃない...
そこで、こんな力技が可能なんじゃないか...という話。
万能ではない上にあまり良い方法ではないので、よく考えて使いましょう。自身の戒めも兼ねて。
準備
題材としてニコニコ動画を使います。
ログイン画面 を開いてページをダウンロードします。
ログイン - ニコニコ.htmlとログイン - ニコニコ_filesが取得できますので、前者を複製してbase.htmlなどとしておきます。
実装
やることは「ダウンロードしたログイン画面のhtmlに、ログイン情報と自動でフォームを送信するスクリプトを追記して、開く」です。
powershellで書くと以下の通りです。
$cred = Get-Credential
$input_id = '<input id="input__mailtel" type="text" name="mail_tel" value="{0}">' -f $cred.UserName
$input_pass = '<input id="input__password" type="password" name="password" value="{0}">' -f (ConvertFrom-SecureString -SecureString $cred.Password -AsPlainText)
$login_html = Get-Content 'base.html'
$login_html = $login_html -replace '<input id="input__mailtel" type="text" name="mail_tel" value="">', $input_id
$login_html = $login_html -replace '<input id="input__password" type="password" name="password">', $input_pass
$login_html = $login_html -replace "<form", '<form name="added_name"'
$login_html = $login_html -replace "</form>", "</form><script>document.added_name.submit();</script>"
$path = './ログイン - ニコニコ.html'
$login_html > $path
Invoke-Item $path
sleep 1
Remove-item $path
やっていることとしては
- base.htmlを次の通り編集する。
-
<input>
要素にvalue="ID"or"PASS"
とIDとPasswardを直接書き込む -
<form>
要素に適当に名前をつける(name="added_name"
) -
<form>
をsubmitするように<script>
を追加
-
- base.htmlでログイン - ニコニコ.htmlを上書き
- ./ログイン - ニコニコ.htmlを開いて、すぐ消す
sleep 1
は開く前にファイルが消されるのを防止するためです。
まとめ
パッと書いたものなので、その点ご容赦願います。
<form> <input>
で記載されているログイン画面があればよく、ニコニコ動画や楽天はそれでした。
こんな単純なサイトは少なくなりました...がこういうことをしたくなる環境では、そうでもないのではないでしょうか。