【问题标题】:Powershell - How can I deal with this type of drop down in IPowershell - 我如何处理这种类型的下拉
【发布时间】:2020-01-24 00:31:28
【问题描述】:

Screenshot

我如何自动化 powershell 来从这种类型的下拉列表中选择公司,因为它不是一个正常的下拉列表,但它仅在您开始输入时才显示值?

例如,在这种情况下,当我键入 C 时,它会显示公司。参考上面的截图。

以下代码插入了该值,但它无法识别它并在要求输入值时出错 -

$test.document.getElementById("val1").value = "Company (Company)"

以下适用于普通下拉菜单的代码在这里不起作用 -

$val = $test.getElementById("val1")
$val[1].selected = $True 
$val.FireEvent('onchange') > $null 

【问题讨论】:

  • 与其在表单中设置值,不如只提交一个包含您想要提交的值的帖子?这通常是一种比 IE 自动化提交表单更可靠的方法。
  • $test.getElementById("val1") 返回 $null 或 single 对象,而不是数组。 $val[1] 因此是错误的,因为没有元素 1(不存在的数组中的第二个元素)
  • @FoxDeploy 我该怎么做?
  • @Theo - 我知道,刚刚尝试过,因为它适用于正常的下拉菜单。
  • 我建议你尝试打开开发者工具并检查代码。另外,请尝试在此处发布示例代码。如果该站点是公开的,那么您可以共享 URL。我们将尝试检查和测试它。它可以帮助缩小问题范围。

标签: powershell internet-explorer


【解决方案1】:

更简单的方法是跳过整个 Internet Explorer 窗口的自动化,而是简单地捕获网络操作并在您的脚本中执行该操作。

这篇博文'Faster Web Cmdlet Design using Chrome 65'(我写的)对此进行了详细介绍,但总结一下:

  1. 打开 Chrome 或新的 Edge,然后按 F12 打开开发者工具,选中“保留日志”框,然后选中“全部”过滤器
  2. 浏览到您有问题的网站
  3. 填写表格
  4. 在您的网站上点击“发布”或“提交”,然后在网络活动列表中查找匹配的操作。
  5. 右键单击并选择“复制为”->“复制为 PowerShell”,然后以此作为表单自动化的基础。

您最终会在剪贴板中获得一个 PowerShell cmd,可以将其缩减为类似的内容,并且是进一步自动化的绝佳起点。

Invoke-WebRequest -Uri "https://api.weather.com/v3/location/search?apiKey=6532d6454b8aa370768e63d6ba5a832e&language=en-US&query=90210&locationType=city%2Cairport%2CpostCode%2Cpws&format=json" `
    -Headers @{
    "method"="GET"
     "authority"="api.weather.com"
     "scheme"="https"
     "path"="/v3/location/search?apiKey=6532d6454b8aa370768e63d6ba5a832e&language=en-US&query=90210&locationType=city%2Cairport%2CpostCode%2Cpws&format=json"
      "accept"="application/json, text/plain, */*"
     "origin"="https://www.wunderground.com"  
  "accept-encoding"="gzip, deflate, br"
  "accept-language"="en-US,en;q=0.9"
  "dnt"="1"
}

这是我们在我工作的大银行大规模测试 Web 应用程序的一部分。

为什么要使用这种方法?

在这种方法中,您是在测试站点上的实际网络交互,而不是填写一个 IE 窗口并提交它。走这条路通常要容易得多,并且比处理 JavaScript jQuery Validation 的变幻莫测和其他可能出现的前端错误更快地获得可行的输出。

【讨论】:

  • 看起来很有趣,一定会尝试 FoXDeploy。 :-) 谢谢
  • 我如何理解这里的输出?是否也可以在浏览器上显示输出?
  • 没有浏览器。当页面在浏览器中正常加载时,它会获取图像、html 文件等,然后在某个地方有一个脚本告诉它向服务器发出 http 请求以获取数据,例如预测或用户发布的数据。这就是现代网络的运作方式。现在,我们的想法是,您无需加载 Web 浏览器并加载此页面以及图像和脚本等所有元素,而是让 PowerShell 执行一个 http 请求来获取数据你真的需要。
  • 还有一个问题,请求页面后如果需要用户名和密码,我可以使用这个脚本传递相同的内容吗?是否会一一进行,即一个打开页面的http请求和第二个登录?如果可能,请分享一个带有语法的示例页面。
  • 提出一个新问题,如果对您有帮助,请将其标记为答案。你的跟进太不一样了,无法在这里回答。
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2015-10-22
  • 2016-02-14
  • 2014-05-17
相关资源
最近更新 更多