通过 PowerShell 填写网络表单无法识别输入的值

Filling web form via PowerShell does not recognize the values entered

作为 QA,我需要通过 Web 表单填写大量申请。 想法是将个人数据放在某个 xls/txt/whatever 文件中,读取文件并使用 Powershell 将数据提供给浏览器。

当我使用下面的代码在IE中填写表单时,尽管看起来工作正常,但在提交表单时出现未输入任何数据的错误。

任何想法或建议如何解决这个问题将不胜感激

遗憾的是我的资源仅限于 Powershell 2.0。 Selenium 或任何其他 "more sophisticated" 工具至少目前是不可能的。

validation error here

$ie = New-Object -com InternetExplorer.Application
$ie.Navigate("MyURL")
$ie.visible = $true

while ($ie.ReadyState -ne 4){sleep -m 100}

Function ClickById($id) {
    $ie.document.getElementById($id).Click()
}

### Základní údaje
$FnId = 'personalData.firstName'
$LnId = 'personalData.lastName'
$PhoneId = 'personalData.mobilePhone'
$EmailId = 'personalData.email'
$DataAgreementCheckBox = 'application.personalDataAgreement'
$SubmitfwdId = 'forward'


$Values = "Ublala", "Pung", "222333444", "ublala@pung.com"
$Ds1Elements = $FnId, $LnId, $PhoneId, $EmailId

$j = 0
foreach ($El in $Ds1Elements) {
    $ie.document.getElementById($El).value = $values[$j]
    $j++
}

ClickById $DataAgreementCheckBox
ClickById $SubmitfwdId

有时网站表单会等到输入框失去焦点时再提交表单前预先验证值。如果您在后台手动设置值,那么文本框可能永远不会获得焦点,因此表单认为您实际上没有输入任何值。

您可以通过依次手动聚焦每个文本框,然后聚焦提交按钮再单击它来解决此问题。 $ie.Document 中的每个元素都应该有一个可以使用的 focus() 方法。

感谢您的建议,但它没有用,因为该表格在很多方面似乎都很愚蠢。 无论如何,我在使用 SendKeys 方法时使用了你的建议作为焦点,它成功了。

一开始我需要加载这个程序集

[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")

然后相应地更改循环以使用 SendKeys 方法

$j = 0
foreach ($El in $Ds1Elements) {
    $ie.document.getElementById($El).focus()
    [System.Windows.Forms.SendKeys]::Sendwait($values[$j]);   
    $j++
}

而且 tradaaaa 表格已填写,没有人抱怨 :)