Web系のサービスは多数ありますが、仕事などで毎日利用するサービスもあるかと思います。
どのサービスも大概始まりはログイン画面でユーザー名とパスワードを入力するのではないでしょうか?
一回一回は大した手間ではありませんが、毎日の作業になると出来れば自動化したいものです。
セキュリティ的に問題が大ありですが、特定の環境で使う分には、自己責任においてログインの自動化を実施するのも良いと思います。
今日日のWebブラウザは良く使うユーザー名やパスワードを自動入力してくれますが、今回のスクリプトは自動入力の次に送信ボタンまで押してくれるスクリプトになります。
<#
.SYNOPSIS
ieでtwitterに自動ログインする
#>
$USER = "ユーザー名"
$PASS = "パスワード"
$BASE_URI = "https://twitter.com/"
$LOGIN_URI = "${BASE_URI}login?lang=ja"
Set-StrictMode -Version Latest
$ErrorActionPreference = "STOP"
# ログイン
function Login
{
param (
[string]
$uri,
[string]
$user,
[string]
$pass
)
$result = $false
$ie = New-Object -ComObject InternetExplorer.Application
try {
$ie.Visible = $true
$ie.Navigate($uri)
while ($ie.busy -or $ie.readystate -ne 4)
{
Start-Sleep -Seconds 1
}
# ログイン画面
if ($ie.LocationURL -eq $uri)
{
$doc = $ie.Document
$doc.body.all | ? {
$_.tagName -eq "input"
} | % {
if ($_.name -eq 'session[username_or_email]')
{
$_.value = $user
}
if ($_.name -eq 'session[password]')
{
$_.value = $pass
}
}
$btn = $doc.body.all | ? {
$_.tagName -eq "button"
} | % {
if (($_.type -eq "submit") -and ($_.className -eq 'submit EdgeButton EdgeButton--primary EdgeButtom--medium'))
{
$_
}
}
if ($btn)
{
$btn.Click()
}
}
Start-Sleep -Seconds 1
if ($ie.LocationURL -eq $BASE_URI)
{
$result = $true
}
} finally {
#$ie.Quit() # IEを終了場合はコメントアウト
}
}
Login $LOGIN_URI $USER $PASS
サンプルとしてTwitterへログインするスクリプトを作りましたが、HTMLの構造が変わるとスクリプトが破綻しますので、実用的には都度スクリプトのメンテナンスが必須になります。
また、ログイン後にスクレイピングをする場合は各サイトの決まりごとに従ってください。Twitterは確かNG
コメント