September 10, 2020

WebサイトのログインをSendKeysで自動化に挑戦(VB2008)

200910-LogIn
古いいろんな社内システムが動いてます。
そして新システムとしてWebベースのシステムが導入された。
各業務でログインが面倒くさいんですよね。

社内で書いたプログラムならログイン画面にコマンドライン引数でユーザーID、パスワードを渡したらログイン画面をスキップして自動ログインなんて出来るけど、社外製のWebアプリではそうも行かず。
(URLの後ろにパラメータ積むとログインする機能を付けといてよ。)

という事でSEたる者いかに楽をするかを考えるワケです。
で、なんちゃってシングルサインオンアプリを作ってみてテスト中です。
Webアプリのログインのサンプルコードを載せておきます。いろいろ調べた結果以下のSendKeysを使う方法でテスト中。(VB2008でコーディング)

■ちょっと説明
SendKeysでキーボード入力をシミュレートしている。

WaitForInputIdle という命令でアプリ側が入力可能状態まで待つというのがあるが、ブラウザは起動してすぐに戻ってきてしまう。
なのでProcessでブラウザが起動しているか調べ、起動していなかったら待ち時間を増やすようにした。
PCのスピードによっては要調整。
IEではどうもエラーになるようです。今どきIEのWebアプリはナシでしょう・・・でしょう?

直接、SendKeysでユーザーIDを送ってしまうとIMEが日本語入力になっていると変換しようとするので、一旦クリップボードにセットして、Ctrl + Vの貼り付けをするようにした。
IMEモードをオフにする命令があると思うが、サクっと調べられなかったのでとりあえずクリップボード経由に。

起動時のウェイト、入力項目移動時のウェイトについてはテストして調整してみてください。

このサンプルコードは1つ目のテキストボックスがユーザーID、2つ目がパスワード、その次にログインボタンの場合。
画面構成が違う場合はTAB移動を挟んで調整が必要です。



■サンプルコード
Sub Sub_WebLogIn()
    Dim intKeyWait As Integer
    Dim intStartWait As Integer
    Dim strUser As String
    Dim strPW As String

    Dim prc As New System.Diagnostics.Process

    'ブラウザが起動しているか、Processを調べる(とりあえずChromeとMicrosoft Edgeを)
    If Process.GetProcessesByName("chrome").Count > 0 Or Process.GetProcessesByName("msedge").Count > 0 Then
        intStartWait = 500
    Else
        intStartWait = 5000 'ブラウザが起動していない場合はウェイト時間を増やす
    End If
    intKeyWait = 500

    strUser = "UserCode" 'ユーザーコードをセット(実際は認証後、iniファイルに保存した値を読んでセットしています)
    strPW = "PassWord" 'パスワードをセット

    '実行
    prc.StartInfo.FileName = "http://172.16.0.100/login.jsp" 'Webアプリのログイン画面のURL
    prc.Start() '既定のブラウザで上記URLを開く
    prc.WaitForInputIdle(5000) '入力可能状態まで最大5秒待つ(プログラムはOKなようだがブラウザはNGですぐ戻ってくる)

    'ユーザー
    System.Threading.Thread.Sleep(intStartWait) '起動時のウェイト
    Clipboard.SetText(strUser) 'IME Modeを回避する為にクリップボードを使用
    System.Windows.Forms.SendKeys.Send("^v") 'Ctrl + V でペースト

    'パスワード
    System.Threading.Thread.Sleep(intKeyWait) '入力項目移動時のウェイト
    Clipboard.SetText(strPW) 'クリップボードに保存
    System.Windows.Forms.SendKeys.Send("{TAB}") 'TABで移動
    System.Windows.Forms.SendKeys.Send("^v") 'Ctrl + V でペースト

    'ログイン
    System.Threading.Thread.Sleep(intKeyWait) '入力項目移動時のウェイト
    System.Windows.Forms.SendKeys.Send("{TAB}") 'TABで移動
    System.Windows.Forms.SendKeys.Send(" ") 'Spaceでログインボタンを押した事に

End Sub


とまぁ、こんな感じでやっとります。
参考までに。




    このエントリーをはてなブックマークに追加 mixiチェック

コメントする

名前
 
  絵文字
 
 
Counter
  • 今日:
  • 昨日:
  • 累計:

Counter

    Archives
    Categories
    記事検索
    QR Code
    QRコード
    ギャラリー
    • スマートロックの『SESAME フェイス AI時代版』を買った
    • スマートロックの『SESAME フェイス AI時代版』を買った
    • スマートロックの『SESAME フェイス AI時代版』を買った
    • スマートロックの『SESAME フェイス AI時代版』を買った
    • スマートロックの『SESAME フェイス AI時代版』を買った
    • PS5 コントローラーの交換用スティックキャップを買ってみた
    • PS5 コントローラーの交換用スティックキャップを買ってみた
    • PS5 コントローラーの交換用スティックキャップを買ってみた
    • PS5 コントローラーの交換用スティックキャップを買ってみた
    • オープンイヤー型のイヤフォン『Anker Soundcore V20i』を買ってみた
    • オープンイヤー型のイヤフォン『Anker Soundcore V20i』を買ってみた
    • オープンイヤー型のイヤフォン『Anker Soundcore V20i』を買ってみた
    • オープンイヤー型のイヤフォン『Anker Soundcore V20i』を買ってみた
    • オープンイヤー型のイヤフォン『Anker Soundcore V20i』を買ってみた
    • 『AirPods Pro 3』を買った
    GEMS RSS
    Recent Comments
    楽天
    楽天で探す
    楽天市場
    • ライブドアブログ