我有一个powershell脚本,我想使用html表单运行。我只有几个表单字段和一个按钮。当我运行我的PowerShell脚本时,它会打开一个新的窗口,然后使用表单导航到正确的页面。如何在用户单击按钮后收集表单中填写的信息?
修改
以下是我正在努力工作的一些代码:
function onClick($server)
{
$server.value="here"
}
$ie = new-object -com "Internetexplorer.Application"
$ie.navigate("bulk_upload.html")
$ie.visible = $true
$doc = $ie.document
$btn = $doc.getElementById("submit")
$server = $doc.getElementById("server")
$btn.add_onclick({onClick $server})
我运行此代码,单击按钮
后没有任何反应更新
我尝试运行此代码:
$ie = new-object -com "Internetexplorer.Application"
$ie.navigate("bulk_upload.html")
$ie.visible = $true
$doc = $ie.document
$btn = $doc.getElementById("submit")
$eventId = Register-ObjectEvent $btn HTMLButtonElementEvents_Event_onclick -Action {write-host 'hi'}
我收到了这个错误:
无法注册活动。不支持需要返回值的事件
答案 0 :(得分:3)
我试图完成同样的事情并跑过你的帖子。我看到它已经有8个月了,但如果你还在寻找我发现的东西。我无法让“onclick”工作。所以我使用了隐藏的输入字段,并为按钮定义了一个动作来更新该字段的值。在powershell中,我为隐藏字段获取了getElementbyId,并使用它来识别用户已完成输入。
$html = @"
<html>
<body>
<form>
First name: <input type="text" id="firstname">
<br>
Last name: <input type="text" id="lastname">
<br>
<input type="hidden" name="finished" value="0">
<input type="button" id="button" value="Continue" onclick="finished.value=1">
</form>
</body>
</html>
"@
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate2("about:blank")
$ie.AddressBar = $false
$ie.MenuBar = $false
$ie.StatusBar = $false
$ie.document.body.innerHTML = $html
$ie.Visible = $true
$doc = $ie.document
while ($doc.getElementByID("finished").value -ne 1) {
start-sleep -m 500
}
$ie.Visible = $false
"You answered:"
$doc.getElementByID("firstname").value
$doc.getElementByID("lastname").value
$ie.quit()
答案 1 :(得分:2)
以下有关使用PowerShell进行Web UI自动化的文章可能会对您有所帮助。 http://msdn.microsoft.com/en-us/magazine/cc337896.aspx
答案 2 :(得分:1)
我知道你指定了一个HTML表单,但你可能最好为此编写一个WinForms GUI。
http://www.techotopia.com/index.php/Creating_GUIs_in_Windows_PowerShell_1.0_with_WinForms
答案 3 :(得分:0)
因为您已经能够从powershell脚本中打开一个新的ie窗口并导航到正确的页面,所以我假设您正在使用InternetExplorer Object。这就是为什么我认为@ravikanth链接对你有好处。从那里(以及互联网上的许多其他帖子),您可以看到如何使用$ie.Document.getElementById("fieldid").value
获取值字段,是吗?
另一个选项是System.Net.WebClient,这是获取/发布网页数据的正确方法。你有一个很好的例子here。
否则,我认为您应该更清楚自己想做什么,并提供一些代码示例,说明您要做的事情。
答案 4 :(得分:0)
我一直想知道这是否真的有效:
它基于从VBScript运行PowerShell进程,然后使用剪贴板将输出传输回HTA。
听起来像是一个不错的黑客,虽然我还没有尝试过。
马特
答案 5 :(得分:0)
我使用父窗口的execScript(&#34; SCRIPT HERE&#34;,&#34; Type Of Script&#34;)添加javascript
$html = @"
<html>
<body>
<form>
First name: <input type="text" id="firstname">
<br>
Last name: <input type="text" id="lastname">
<br>
<input type="button" id="finished" value="Submit" onclick=''>
</form>
</body>
</html>
"@
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("about:blank")
$ie.document.body.innerHTML = $html
$doc = $ie.Document
$doc.parentWindow.execScript("document.getElementById('finished').onclick = function(){document.getElementById('finished').value = 'Submitted';};","javascript")
$ie.Visible = $true
while ($doc.getElementByID("finished").value -ne "Submitted") {
start-sleep -m 500
$firstName = $doc.getElementByID("firstname").value
$lastName = $doc.getElementByID("lastname").value
}
$ie.Visible = $false
"You answered:"
$doc.getElementByID("firstname").value
$doc.getElementByID("lastname").value
$ie.quit()
答案 6 :(得分:0)
@Clayton在其他Windows 10 OS系统上正常工作,但在Windows 10 Azure VM上给出错误
错误- 在此对象上找不到属性“ innerHTML”。验证该属性存在并且可以设置。 在第24行char:1