我知道我们应该尽可能多地添加细节,但我不知道它是如何工作的,所以我的细节将是最小的。我不确定这是否是正确/最好的方法,所以请放轻松我。这是我的情况:
我想从网页上获取信息。我无法为您提供网页,因为它是公司的内部网页。基本上,网页有一个带有一堆文本框和几个按钮的表单(一个是提交的)。我想以编程方式(使用PowerShell - 或者像Python这样的其他东西可以更好地工作)web请求页面提交一条信息并获得结果。
我基本上有一个需要循环的名称列表。手动完成,每个名称将粘贴到页面上的一个文本框中,单击提交按钮,结果将弹出。
我想循环浏览名称列表并对每个项目执行web后请求,然后获取结果。可以使用PowerShell完成吗?
我一直在搞乱Invoke-WebRequest,但我不完全确定它是如何工作的。我很确定网页可以在其上执行发布请求,因为当我执行
时$req = Invoke-WebRequest -URI https://www.foobar.com -Method Post
我不接受有关不接受帖子的网页的任何错误。有什么建议吗?
以下是网页上的一些相关代码:
<button class="Button k-button k-button-first SearchButton" data-categorytext="#SearchByValue, #ServerRequestValue" data-summary="" id="btnSearch_SearchBy">Search</button>
<script>
jQuery(function(){jQuery("#btnSearch_SearchBy").kendoButton({});});
</script>
我需要向
提供信息的文本框<input class="k-textbox SearchField" data-summary="Server Name like " id="ServerNameSearchValue" name="ServerNameSearchValue" style="width: 300px;" type="search" value="SOME_SERVER_NAME_FROM_MY_LIST" />
提交表单后,页面上会弹出一个包含结果的窗口。页面没有重新加载或任何东西,所以在执行发布请求以从新窗口获取信息后,我是否需要在页面上执行get请求?
答案 0 :(得分:0)
您需要指定要在Hasthable中发送的POST参数:
# Name is the field name on the form
$params = @{Name = 'Some Name'}
$results = Invoke-WebRequest -Uri http://example.com/foobar -Method POST -Body $params
$params = @{TextBox1 = 'Some Name'; TextBox2 = 'Some Name'}
您还可以使用带有Invoke-WebRequest的GET请求,然后解析HTML以获取文本框名称并使用名称和值构建上面的数组。如果你想让你的代码更通用,那就更复杂但很有价值。
但是,无论如何,您都必须在Powershell脚本中设置这些组合框/文本框的值。