現象
参加モードで正常に実行できるスクリプトは、無人モードでは正常に実行されません。
通常、次のようなメッセージで失敗します。"アクション 'クリック' の実行に問題がありました。 Web ページでリンクをクリックできませんでした。
原因
無人実行での一般的なエラーは、次のいずれかが原因で発生します。
-
無人モードに切り替える前に、参加モードでテストされていないスクリプト
-
無人セッションで使用されるさまざまな構成
-
無人実行で使用される別の Windows アカウントは、フローの作成に使用されたアカウントとは異なります
-
画面の解像度 ( 画面の解像度を変更する方法を参照)
-
ブラウザーの構成
-
User
-
ポップアップ ブロック
-
拡張機能 (見つからない/アクティブ化されていない)
-
-
-
画面が完全に読み込まれていない (遅延がない)
-
セッションの開始時に UI オートメーションをブロックする UAC プロンプト
ソリューション
さまざまな原因が考えられるため、次のソリューションでは、失敗したアクションの前後にスクリーンショットを追加して視覚的なフィードバックを得る方法について説明します。 無人スクリプトの失敗後にスクリーンショットを注意深く見ると、上記の原因の 1 つを見つけるのに役立つ可能性があります。 また、表示解像度とスケール設定を比較する方法についても説明します。
フローに既にスクリーンショットがあり、実行に失敗している場合は、フローの実行をブロックするユーザー アカウント制御 (UAC) ダイアログが表示されることがあります。 フローを実行するために使用しているアカウントの問題を再現しているマシンにログインし、そのようなブロックダイアログがあるかどうかを確認してください。 その場合は、スタートアップ ルーチンを変更して、この問題が発生しないようにします。
トラブルシューティングにスクリーンショットを追加する
まず、接続で使用しているアカウントの問題を再現するコンピューターにログインします。 UI オートメーションをブロックしている可能性がある UAC プロンプトがないことを確認します。
UI オートメーションをブロックするものがない場合は、無人モードで失敗したステップの前後にスクリーンショットを撮ると、視覚的なフィードバックを得るのに役立ちます。
失敗した後にスクリーンショットを作成できるように、失敗した場合は失敗した手順を続行する必要があります。
1- [スクリーンショットの作成] アクションを探す
2- [スクリーンショットの作成] アクションをスクリプト側にドラッグ アンド ドロップする
3- アクションを編集し、クリップボードの代わりに "ファイル" を使用し、ファイル名の場所に "before" を使用
4- その後、コピー/貼り付け、その中の後に付けてスクリーンショットファイル名を変更
5- 失敗したステップを スクリーンショットで囲む
6- 失敗したステップの onError 動作を変更する
6a - ステップを 編集 し、下部にある[onError]\(エラー\) をクリックします
6b- フロー実行を "フロー実行の続行" と "次のアクションに移動" に設定します
7- 保存し、 ローカルで実行 してスクリーンショットが生成されることをテストし、 無人実行を再起動します。
8- 無人 スクリーンショット ファイルを確認します。
画面の解像度とスケールの違いを確認する
出席実行と無人実行の間で解決設定を比較するには、両方のモードで実行する前に、スクリプトに次のアクションを追加します。
-
PAD デザイナーで以下のコード スニペットをコピー/貼り付けます。これにより、解決設定をキャプチャし、タイムスタンプ付きファイルに出力するために必要な手順が作成されます。
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
Text.ConvertDateTimeToText.FromCustomDateTime DateTime: CurrentDateTime CustomFormat: $'''yyyy_MM_dd_hh_mm_ss''' Result=> FormattedDateTime
Workstation.GetScreenResolution MonitorNumber: 1 MonitorWidth=> MonitorWidth MonitorHeight=> MonitorHeight MonitorBitCount=> MonitorBitCount MonitorFrequency=> MonitorFrequency
@@copilotGeneratedAction: 'False'
Scripting.RunPowershellScript.RunPowershellScript Script: $'''Add-Type @\'
using System;
using System.Runtime.InteropServices;
using System.Drawing;
public class DPI {
[DllImport(\"gdi32.dll\")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
public enum DeviceCap {
VERTRES = 10,
DESKTOPVERTRES = 117
}
public static float scaling() {
Graphics g = Graphics.FromHwnd(IntPtr.Zero);
IntPtr desktop = g.GetHdc();
int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
return (float)PhysicalScreenHeight / (float)LogicalScreenHeight;
}
}
\'@ -ReferencedAssemblies \'System.Drawing.dll\' -ErrorAction Stop
Return [DPI]::scaling() * 100''' ScriptOutput=> MonitorScaleOutput
File.WriteText File: $'''c:\\test\\resolution_%FormattedDateTime%.txt''' TextToWrite: $'''height: %MonitorHeight% width: %MonitorWidth% frequency: %MonitorFrequency% bitCount: %MonitorBitCount% scale: %MonitorScaleOutput%''' AppendNewLine: True IfFileExists: File.IfFileExists.Overwrite Encoding: File.FileEncoding.Unicode
-
ローカル実行が成功したことをチェック、最後のアクションの出力ファイル パスを確認して保存します。
-
出席モードと無人モードの両方でスクリプトを実行し、解像度とスケール出力の値が両方のモードで同じかどうかをチェックします。
注:
前述のように、スクリーンショットアクション自体が失敗した場合、フローの実行をブロックするユーザー アカウント制御 (UAC) ダイアログが表示されることがあります。 フローを実行するために使用しているアカウントの問題を再現しているマシンにログインし、そのようなブロックダイアログがあるかどうかを確認してください。 その場合は、スタートアップ ルーチンを変更して、この問題が発生しないようにします。
スクリプトに他の手順がある場合は、スクリーンショットを撮ることができるようにエラーをスローしないように動作が変更されたため、後で失敗する可能性があります。 そのため、2 番目のスクリーンショットの後のエラーは無視する必要があります。
問題が理解され、修正されたら、フローの元の動作を復元してエラーをスローします。