我正在更新此标题,因为我确信这是接受cookie,将其记录在会话变量中并将其传递给websession中的下一个Web请求。虽然我可能更接近,但我仍然无法做到。
关于以下URI:https://support.microsoft.com/en-us/hotfix/kbhotfix 假设没有cookie,则会出现两个按钮:
使用PowerShell的Invoke-WebRequest,我如何点击"我接受了?
使用网络上的各种示例,我一直尝试以下各种变体:
$baseUri = "https://support.microsoft.com"
$uri = $baseURI +"/en-us/hotfix/kbhotfix"
$Response = Invoke-WebRequest -Uri $uri -SessionVariable sv
$Response.forms[0].Action #= /en-us/Hotfix/KbHotfix
$Form = $Response.forms[0]
$form.fields["accept"] = "Accept"
$MainPage = Invoke-WebRequest -Uri ($baseUri + $Form.Action) -Method
$form.Method -Body $form.fields -WebSession $sv
$MainPage
但是当我执行" $ MainPage.forms [0] .Fields时,结果值是"我不接受"或者"我接受"对我来说,这表明它没有"点击我接受。
我是否需要调用onClick事件?
将非常感激地收到任何建议/例子。
(PowerShell V5)
答案 0 :(得分:0)
您只需添加额外的Cookie:
$cookie = New-Object System.Net.Cookie("hotfixEulaCookie", "1", "/", "support.microsoft.com")
$sv.Cookies.Add($cookie)
我认为你甚至不需要第一个请求。只需创建一个WebRequestSession
变量并将其添加到其中即可。
将来如何解决这些问题:
这是表单在HTML中的外观:
<input class="eulabutton" id="cancel" name="cancel" onclick="onHotfixEulaAction('cancel', '/kb//')" type="button" value="I Do Not Accept" ms.cmptyp="button" ms.cmpnm="noacpt" ms.title="Donot Accept" ms.interactiontype="22">
<input class="eulabutton" id="accept" name="accept" onclick="onHotfixEulaAction('accept', '/hotfix/kbhotfix?kbnum=&kbln=')" type="button" value="I Accept" ms.cmptyp="button" ms.cmpnm="acpt" ms.title="Accept" ms.interactiontype="22">
我们搜索onHotfixEulaAction并找到
https://az623152.vo.msecnd.net/cdnresources/2.38/common/script/gsfx/default.js
function onHotfixEulaAction(arg, url) {
setcookieval("hotfixEulaCookie", (arg == "accept") ? '1' : '0', '', false);
document.location.href = url;
}