通过 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" 工具至少目前是不可能的。
$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 表格已填写,没有人抱怨 :)
作为 QA,我需要通过 Web 表单填写大量申请。 想法是将个人数据放在某个 xls/txt/whatever 文件中,读取文件并使用 Powershell 将数据提供给浏览器。
当我使用下面的代码在IE中填写表单时,尽管看起来工作正常,但在提交表单时出现未输入任何数据的错误。
任何想法或建议如何解决这个问题将不胜感激
遗憾的是我的资源仅限于 Powershell 2.0。 Selenium 或任何其他 "more sophisticated" 工具至少目前是不可能的。
$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 表格已填写,没有人抱怨 :)