LoginSignup
1
0

More than 1 year has passed since last update.

Seleniumを使わずに自動ログインする

Last updated at Posted at 2023-01-14

概要

とある事情で毎度のこと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

やっていることとしては

  1. base.htmlを次の通り編集する。
    • <input>要素にvalue="ID"or"PASS"とIDとPasswardを直接書き込む
    • <form>要素に適当に名前をつける(name="added_name"
    • <form>をsubmitするように<script>を追加
  2. base.htmlでログイン - ニコニコ.htmlを上書き
  3. ./ログイン - ニコニコ.htmlを開いて、すぐ消す

sleep 1は開く前にファイルが消されるのを防止するためです。

まとめ

パッと書いたものなので、その点ご容赦願います。
<form> <input>で記載されているログイン画面があればよく、ニコニコ動画や楽天はそれでした。
こんな単純なサイトは少なくなりました...がこういうことをしたくなる環境では、そうでもないのではないでしょうか。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0