見出し画像

VBAでタイピング練習自動化してみた

もうそれ、
練習ちゃうやん( ´∀` )

というわけでTwitterに引き続きタイピング練習を自動化してみました。

ちなみにBenesseの日本語(ローマ字)です。
↓これね。

最初は普通にコード組みましたけど、自動Twitterから使ってるクラスモジュールに追加して少ないコードでできるように改良しました。

そう考えると、万が一これ読んでくれている方がいた場合参考にはしにくいかもね。はい、自己満です( ´∀` )

ポイントは、次のタイプするキーに対してcopyselectorでコピーした要素に「.next」が付くみたいだったのでそれをチェックして、「.next」が付いてる要素のキーをSendKyesで実行する感じです。

Pythonとかはよく見かけるけどVBAでは検索しても見当たらなかったからやり方が正しいかは疑問。

標準モジュールの方のコードはこんな感じ

Option Explicit
    
    Public myChrome          As New OperationCromeDriver
    Public typeURL           As String
    Public startButtonXPath  As String
    Public startTypeXPath    As String
    Public rngKyes           As Range
    Public CheckKye          As Range
    Public finishCheckCss    As String
    Public finishCheckText   As String
    
    
Sub タイピング練習マクロ()

    Call 初期設定
    
    Call タイピング練習実行
    
End Sub

Sub 初期設定()
    
    Dim wb        As Workbook
    Dim ws        As Worksheet
    
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("タイピング練習")
    Set rngKyes = ws.Range("B13:B41")
    
    typeURL = ws.Range("C3")
    startButtonXPath = ws.Range("C5")
    startTypeXPath = ws.Range("C7")
    finishCheckText = ws.Range("B9")
    finishCheckCss = ws.Range("C9")
    
End Sub


Sub タイピング練習実行()
    With myChrome
        .DriverUrlSet typeURL
        .PushButton startButtonXPath
        .PushButton startTypeXPath
        .Driver.SendKeys .skey.Space
        
        Dim kye As String
        Do
            For Each CheckKye In rngKyes
                kye = .KyeCheck(CheckKye.Next.Value, CheckKye.Value)
                If kye <> "" Then
                    .Driver.SendKeys kye
                    .Driver.Wait 50
                    Exit For
                End If
            Next
        Loop Until .textCheck(finishCheckCss, finishCheckText) = True
        
    End With
    Stop
End Sub


うーん。短くまとまるとたのすぃー( ´∀` )

クラスモジュールはこんな感じ.
余計なものも交じってるけど。

Option Explicit

Public Driver    As New Selenium.WebDriver
Public elm       As Selenium.WebElement
Public skey      As New Selenium.Keys
Public key       As New Keys
Public myBy      As New By


'CheomeドライバーをセットしてURLを開く
Sub DriverUrlSet(URL)

    Driver.AddArgument "disable-gpu"             'ウインドウサイズを最大化で開く'
    Driver.AddArgument "start-maximized"         '同上'
    Driver.Start "chrome"
    Driver.Wait 2000
    Driver.Get URL                               'URLのページ開く'
    Driver.Wait 2000

End Sub


'Webページ上に指定のXPathがあるかをチェックする。XPathを取得するまでループ処理をする'
'一定時間経過するとプログラムを終了させる'
Sub XPathCheck(ByVal checkXPath1 As String, Optional checkXPath2 As String = "nothingXPath")
    
    Dim i As Long: i = 0
    Dim Flag As Boolean: Flag = False
    
    Do
        Flag = Driver.IsElementPresent(myBy.XPath(checkXPath1)) Or _
                  Driver.IsElementPresent(myBy.XPath(checkXPath2))
        Driver.Wait 2000
        
        i = i + 1
        If i = 50 Then
            MsgBox "処理が継続できません。終了します。"
            End
        End If
    Loop Until Flag = True

End Sub


'指定したCSS要素をWebページ上から取得した場合に、指定したテキストがあるかをチェックして評価値を返す'
Function textCheck(ByVal CheckTextCss As String, ByVal CheckText As String)
    
    Dim check As Boolean:  check = False
    
    If Driver.FindElementByCss(CheckTextCss).Text = CheckText Then check = True

    textCheck = check

End Function


'Webページ上に指定したCSS要素がある場合に指定したキーの文字列を返す'
Function KyeCheck(ByVal CheckKyeCss As String, ByVal CheckKye As String)

    Dim comKye As String: comKye = ""
    If Driver.IsElementPresent(myBy.Css(CheckKyeCss)) Then comKye = CheckKye
    KyeCheck = comKye
    
End Function


'指定したXPath要素のインプットボックスに指定したテキストを入力する'
Sub TextInput(ByVal InputXPath As String, ByVal InputText As String)

    Set elm = Driver.FindElementByXPath(InputXPath)      '入力ボックスのxPath'
    
    elm.Clear
    elm.Click
    elm.SendKeys InputText                               '入力内容'
    elm.SendKeys skey.Enter
    
    Driver.Wait 1000

End Sub


'指定したXPath要素のボタンをクリックする'
Sub PushButton(ByVal ButtonXPath As String)

    Set elm = Driver.FindElementByXPath(ButtonXPath)      'ボタン要素のXPath'
    
    elm.Click
    Driver.Wait 1000

End Sub

Noteってコードは「'」で囲むと色が変わるみたいやからVBAの場合はコメントの後ろにも「'」を付けてやらないと見にくくなるね。
めんどくさいw

今度は点数も表示されるようにしようかな。

もしタイピング練習の点数も評価になる会社があれば最高ですね。

ないやろうけど( ´∀` )

ではまた。

この記事が気に入ったらサポートをしてみませんか?