質問

私は、ユーザーがページで実行するアクションをシミュレートするpowershellスクリプトを書いています。 ボタンをクリックするのに問題があります。ページには、データベースへの変更を保存するフォームと内部ボタンがあります:

input type="button" onClick="__doPostBack('someIdentifier','SAVE')" value="Save changes"

クライアント側から呼び出す必要があります。問題は、ボタン自体がid =""を持っていることです。およびtag =""そのため、次は機能しません:

$ie = new-object -com "InternetExplorer.Application";
$ie.visible = $true;
$ie.navigate("http://myTestedPage.com");
$doc = $ie.Document;

#doesn't work
$save = $doc.getElementByID("")
#doesn't work neither
$save = $doc.getElementsByTagName("");

#so how to call
$save.click();

getElementbyIDとgetElementsByTagNameの両方は、いくつかの操作を実行するだけですが、それらの効果のみが、CPU使用率が最大にジャンプすることです。

フォームの elements [] を取得し、そこでボタンを見つけることを考えていましたが、どちらでもありません(前のケースのような効果)。

それを行うための他の(素晴らしい)方法はありますか(明らかに私は気づいていません)? InvokeScript

のようなものが必要です
webBrowser = new System.Windows.Forms.WebBrowser()
webBrowser.Document.InvokeScript(@"__doPostBack", new object[] {@"someIdentifier", @"SAVE"});

しかし、.NETスタンドアロンアプリではなく、powershell(または他のスクリプト/プログラミング言語、おそらくVBScript?)によって操作されるIEのインスタンスを使用する必要があります。

役に立ちましたか?

解決

2回目の試行

次のコードは、 value =" Save changes" 属性を持つすべての input 要素を検索してクリックします。

インターフェイスで公開されていないため、属性の nodeValue プロパティを動的に読み取る必要がありました。

function getProperty ([System.__ComObject] $obj, [string] $prop)
{
    [System.__ComObject].InvokeMember($prop, [System.Reflection.BindingFlags]::GetProperty, $null, $obj, $null)
}

$ie = new-object -com "InternetExplorer.Application"
$ie.visible = $true
$ie.navigate('e:\scratch\h.html')
$doc = $ie.Document

$inputElts = $doc.getElementsByTagName('input')
foreach ($elt in $inputElts)
{
    $a = $elt.getAttributeNode('value')
    if ($a -and (getProperty $a 'nodeValue') -eq 'Save changes')
    {
        $elt.Click()
    }
}

これは私のHTML:

<html>
<head>
<script type="text/javascript">
function alertMsg() {alert("Button was clicked!")}
</script>
</head>
<body>
<form>
<input type="button" onclick="alertMsg()"  value="Save changes" />
</form>
</body>
</html>

他のヒント

ヨシバ、   私は同様の問題に苦しんでいます。要素名を取得できます。 CLIからこのコードを実行します。次に、タブキーを使用して、クリックする要素を強調表示します。   次に、「$ doc.activeelement」と入力します。目的の要素のプロパティを取得します。タグ名、名前、またはIDで要素を取得できることに注意してください。必要な要素を取得するには、このような並べ替えを行う必要がありました。

$ link = $ doc.getElementsByTagName(&quot; A&quot;)|ここで、{$ _。sourceIndex -like&quot; 256&quot;}

おそらく同様のことができます。 デイブM

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top