Autoit プログラミングWindows 10Windows 11便利機能

Autoit で Microsoft Edge を操作するサンプルコード

スポンサーリンク

前回の記事で Autoit で Microsoft Edge を操作するための準備を紹介しました。

今回は、Autoit で Microsoft Edge を操作するサンプルコードを紹介します。

準備が正しくないとコードも正しく動作しませんので、よく確認をしてから実行してください。

サンプルコードで出来ること

  • Edge ブラウザーを開く(WebDriverを通して)
  • 新しいタブを開く
  • 現在のタブを閉じる(最後に開いたタブ)
  • 最後に開いたタブのページのソースを取得し、メモ帳で開く
  • ウィンドウの最大化と元に戻す(縮小)
  • ウィンドウの最小化と元に戻す
  • 現在のタブ(最後に開いたタブ)で指定した URL を開く

サンプルコード

If @OSArch <> “X64” Then Exit で 64ビットではない OS では起動できないようにしています。

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <wd_core.au3>
#include <Array.au3>
#include-once

If @OSArch <> "X64" Then Exit
Global $sess, $sCurrentTabHandle, $Running = 0, $aa[1], $tab = 0
$ProgramFilesDir = @HomeDrive & '\Program Files (x86)'
; WebDriver の場所は環境に応じて変更してください。
$EdgeDriver = $ProgramFilesDir & "\autoit3\WebDriver\msedgedriver.exe"
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"ms:edgeOptions": {"binary": "' & _
        StringReplace($ProgramFilesDir, "\", "/") & '/Microsoft/Edge/Application/msedge.exe"}}}}'

; コンボボックスに表示する URL
$url = "https://windows-waza.com/forced-upgrade-to-windows-11-is-not-recommended/" & "|" & _
        "https://windows-waza.com/downgrade-from-windows-11-to-windows-10/" & "|" & _
        "https://windows-waza.com/windows-11-boot-option/" & "|" & _
        "https://windows-waza.com/win10-win11-create-a-password-reset-disk/" & "|" & _
        "https://windows-waza.com/win10-win11-troubleshooting-tool/"

Setup($EdgeDriver); Web ドライバー コンソール アプリを起動します。

If @error Then
    MsgBox(4096, "Error", "WebDriver が起動できませんでした。ファイルのパスを確認してください。")
    Exit
EndIf

$Form1 = GUICreate("Form1", 474, 429, -1, -1, -1, $WS_EX_TOPMOST)
$Button1 = GUICtrlCreateButton("ウィンドウを最大化", 24, 56, 209, 57, $BS_MULTILINE)
$Button2 = GUICtrlCreateButton("ウィンドウを最小化", 248, 56, 209, 57, $BS_MULTILINE)
$Button3 = GUICtrlCreateButton("新しいタブを開く", 24, 128, 209, 57)
$Button4 = GUICtrlCreateButton("ページのソースを取得" & @LF & "(最後のページ)", 248, 128, 209, 57, $BS_MULTILINE)
$Button5 = GUICtrlCreateButton("Edge を開く(WebDriverを通して)", 24, 272, 433, 65)
$Button6 = GUICtrlCreateButton("現在のタブを閉じる(最後に開いたタブ)", 24, 352, 433, 65)
$Combo1 = GUICtrlCreateCombo("", 24, 200, 433, 25, $CBS_DROPDOWN)
GUICtrlSetData(-1, $url)
$Button7 = GUICtrlCreateButton("上のURLを開く(最後に開いたタブで開く)", 24, 232, 433, 25)
$Label1 = GUICtrlCreateLabel("MicroSoft Edge ブラウザーを操作するサンプルを作ってみました。" & @LF & _
        "なるべく簡単なコードにしてみましたので、参考にしてみて下さい。", 24, 8, 400, 40)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            _WD_DeleteSession($sess); 既存のセッションを削除
            _WD_Shutdown(); Webdriverを終了
            Exit
        Case $Button1
            If $Running Then
                If GUICtrlRead($Button1) = "ウィンドウを最大化" Then
                    _WD_Window($sess, 'MAXIMIZE'); ウィンドウを最大化
                    GUICtrlSetData($Button1, "ウィンドウを元に戻す" & @LF & "(縮小)")
                    GUICtrlSetData($Button2, "ウィンドウを最小化")
                Else
                    _WD_Window($sess, 'rect', '{"handle":"' & $sCurrentTabHandle & '"}')
                    GUICtrlSetData($Button1, "ウィンドウを最大化")
                EndIf
            EndIf
        Case $Button2
            If $Running Then
                If GUICtrlRead($Button2) = "ウィンドウを最小化" Then
                    _WD_Window($sess, 'MINIMIZE'); ウィンドウを最小化
                    GUICtrlSetData($Button2, "ウィンドウを元に戻す" & @LF & "(デフォルト)")
                    GUICtrlSetData($Button1, "ウィンドウを最大化")
                Else
                    _WD_Window($sess, 'rect', '{"handle":"' & $sCurrentTabHandle & '"}')
                    GUICtrlSetData($Button2, "ウィンドウを最小化")
                EndIf
            EndIf
        Case $Button3
            If $Running Then
                _WD_NewTab($sess); 新しいタブを開く
                $aa[$tab] = $sCurrentTabHandle
                $tab += 1
                ReDim $aa[$tab + 1]
            EndIf
        Case $Button4
            If $Running Then
                $Source = _WD_GetSource($sess); ページのソースを取得
                If $Source Then
                    ; 取得したソースをテキストファイルに書き込む
                    $open = FileOpen(@TempDir & "\a.txt", 2)
                    FileWrite($open, $Source)
                    FileClose($open)
                    ShellExecute(@TempDir & "\a.txt"); 取得したソースをメモ帳で表示
                EndIf
            EndIf
        Case $Button5
            If Not $Running Then
                ; Web ドライバーから新しいセッションを要求します(Edge を開く)
                $sess = _WD_CreateSession($sDesiredCapabilities)
                _WD_Navigate($sess, "about:blank"); Edge を起動した時最初に表示する URL
                $Running = 1
            EndIf
        Case $Button6
            If $Running Then
                If Not $tab Then
                    _WD_DeleteSession($sess); 既存のセッションを削除
                    $Running = 0
                    GUICtrlSetData($Button1, "ウィンドウを最大化")
                    GUICtrlSetData($Button2, "ウィンドウを最小化")
                Else
                    _WD_Window($sess, "CLOSE"); 最後に開いたタブを閉じる
                    _WD_Window($sess, 'Switch', '{"handle":"' & $aa[$tab - 1] & '"}')
                    $tab -= 1
                EndIf
            EndIf
        Case $Button7
            If $Running Then
                _WD_Navigate($sess, GUICtrlRead($Combo1)); 指定したURLを開く
                If @error Then
                    MsgBox(4096, "Error", "指定した URL を開けません。URL が正しいか確認してください。", 0, $Form1)
                EndIf
            EndIf
        Case $Label1
    EndSwitch
WEnd

Func Setup($Driver)
    _WD_Option('Driver', $Driver)
    _WD_Option('Port', 9515)
    _WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\msedge.log"')
    _WD_Startup()
EndFunc   ;==>Setup

;https://www.autoitscript.com/forum/topic/208633-webdriver-udf-w3c-compliant-version-20221003/ より。一部変更しています。
Func _WD_NewTab($sSession, $lSwitch = True, $iTimeout = -1)
    Local Const $sFuncName = "_WD_NewTab"
    Local $sTabHandle = '', $sLastTabHandle, $hWaitTimer, $iTabIndex, $aTemp

    If $iTimeout = -1 Then $iTimeout = $_WD_DefaultTimeout

    Local $aHandles = _WD_Window($sSession, 'handles')

    If @error <> $_WD_ERROR_Success Or Not IsArray($aHandles) Then
        Return SetError(__WD_Error($sFuncName, $_WD_ERROR_Exception), 0, $sTabHandle)
    EndIf

    $iTabCount = UBound($aHandles)

    ; Get handle to current last tab
    $sLastTabHandle = $aHandles[$iTabCount - 1]

    ; Get handle for current tab
    $sCurrentTabHandle = _WD_Window($sSession, 'window')

    If @error = $_WD_ERROR_Success Then
        ; Search for current tab handle in array of tab handles. If not found,
        ; then make the current tab handle equal to the last tab
        $iTabIndex = _ArraySearch($aHandles, $sCurrentTabHandle)

        If @error Then
            $sCurrentTabHandle = $sLastTabHandle
            $iTabIndex = $iTabCount - 1
        EndIf
    Else
        _WD_Window($sSession, 'Switch', '{"handle":"' & $sLastTabHandle & '"}')
        $sCurrentTabHandle = $sLastTabHandle
        $iTabIndex = $iTabCount - 1
    EndIf


    _WD_ExecuteScript($sSession, 'window.open()', '{}')

    If @error <> $_WD_ERROR_Success Then
        Return SetError(__WD_Error($sFuncName, $_WD_ERROR_Exception), 0, $sTabHandle)
    EndIf

    $hWaitTimer = TimerInit()

    While 1
        $aTemp = _WD_Window($sSession, 'handles')

        If UBound($aTemp) > $iTabCount Then
            $sTabHandle = $aTemp[$iTabIndex + 1]
            ExitLoop
        EndIf

        If TimerDiff($hWaitTimer) > $iTimeout Then Return SetError(__WD_Error($sFuncName, $_WD_ERROR_Timeout), 0, $sTabHandle)

        Sleep(10)
    WEnd

    If $lSwitch Then
        _WD_Window($sSession, 'Switch', '{"handle":"' & $sTabHandle & '"}')
    Else
        _WD_Window($sSession, 'Switch', '{"handle":"' & $sCurrentTabHandle & '"}')
    EndIf

    Return SetError($_WD_ERROR_Success, 0, $sTabHandle)
EndFunc   ;==>_WD_NewTab
Autoit で Microsoft Edge を操作するサンプル

※Edge が開かない場合は WebDriver が古い可能性があります。お使いの Edge のバージョンと同じバージョンの WebDriver をダウンロードしてください。

なるべくわかりやすく書いてみましたので、サンプルコードを参考にいろいろと変更してみてください。

「_WD_Startup ==> General Error: Error launching web driver!」エラーが出る

2023/03/26:

コードを実行すると「_WD_Startup ==> General Error: Error launching web driver!」というエラーが表示され、WebDriver が起動できないことがあります。

筆者の環境でも先日(深夜)にこのエラーが出ましたが、翌朝には正常に起動できるようになっていました。

このエラーが出た場合、しばらく時間をおいて実行してみてください。

コメント(降順)

OSの不具合に関する質問の場合は、明確かつ迅速に解決するために、以下の情報を分かる範囲で質問に含めてください。

1. 使用しているOSのバージョン

  • 例:Windows 10 Home 22H2、Windows 11 Pro 21H2 など

2. 発生している具体的な症状

  • 具体的な症状をできるだけ詳しく説明してください。
  • エラーメッセージが表示される場合は、その内容を正確に記載してください。
  • いつ、どのような操作中に問題が発生したのかを明記してください。

3. 症状が出たのはいつからですか?

  • 症状が出始めた時期をできるだけ具体的に教えてください。

4. 症状が出る前に何か特別な操作をしましたか?

  • 以下のような操作を行った場合は、教えてください。
    • アプリのインストール
    • システムの設定を変更するツールを使用した
    • ファイルの削除
    • レジストリの編集
    • その他

5. 症状が出た後に試したことはありますか?

  • 問題解決のために試したことを分かる範囲でリストアップしてください。
  • インターネットで調べた解決策を試したかどうか、その結果も記載してください。

6. Windows Updateは定期的に行っていますか?

  • 最近インストールした更新プログラムを教えてください。
  • 例:KB5034441

7. セキュリティソフトをご利用されていますか?

  • セキュリティソフトの種類(名称)を教えてください。

8. PCの型番

  • PCの型番がわかれば教えてください。
  • わからない場合は、「デスクトップ」または「ノート」と記入してください。
タイトルとURLをコピーしました