PowerShellのIE自動実行ツールでJavaScrip tの「Alert」,「Confirm」 などのダイアログが出たときに、ボタンが押せない。
Sendkeyを使えればいいのだが、確認ダイアログを表示させ ると、入力待ち状態となり、PowerShellからキーを送る ことができない。
RunspacePoolを使えばいいかと思ったが、使い方が悪 いのかできなかった。
すべての処理を、RunspacePool制御下におかないと、 非同期処理はできないようだ。
やむなく、非同期でEnterキーを送る処理を作って、DLLで 呼び出すことにした。
------------------------------ ------------------------------ ------------------------------ -----------------------
using System.Windows.Forms;
using System.Threading;
using System.Threading.Tasks;
namespace SendKeysAsync
{
public class SendKeyAsyncUTL
{
public void SendEnter()
{
Task.Run(() =>{Thread.Sleep( 3000 );SendKeys.SendWait("{ENTER}") ;} );
}
}
}
------------------------------ ------------------------------ ------------------------------ -----------------------
PowerShell
[System.Reflection.Assembly]:: LoadFile("D:/sendkeys.dll")
function SendkeysJavaScript()
{
$dd = New-Object SendKeysAsync.SendKeyAsyncUTL
$dd.SendEnter()
}
SendkeysJavaScript
$btn=$doc.getElementByID("Butt on1")
$btn.click()
------------------------------ ------------------------------ ------------------------------ -----------------------
HTML
< INPUT onclick="javascript:if (confirm('よろしいですか?')){return true;} else {return false;};" id=Button1 >
------------------------------ ------------------------------ ------------------------------ -----------------------
Button1により、Confirmが出力される。
その前に、非同期でSendKeyを実行するモジュールを呼び出 しておく。
これにより、Button1でのConfirmが表示された後、 Enterが送られ、Confirmが処理される。
ただし、問題もある。
Sendkeyが実行される前に、ダイアログが表示されている必 要があるため、Sleep時間の調整が必要となり、 対象のダイアログがアクティブになっていないといけない。
本日の河上選手:お休み
11/18~ 江戸川
本日の河上選手:お休み
11/18~ 江戸川