如何构建含方括号属性的PowerShell哈希表?
问题:PowerShell哈希表键含方括号报错,无法提交内网登录请求
我爬取公司内网网站时遇到问题:用户名和密码字段的name属性包含方括号(user[name]、user[password])。
尝试的代码
$Creds = Get-Credential -Message "input e-mail and password" $LoginUri = "公司内网地址,不便公开" $LoginPage = Invoke-WebRequest -Uri $LoginUri -SessionVariable "TempSession" $Auth_Token = $LoginPage.InputFields | Where-Object {$_.name -eq "Auth_Token"} | Select-Object -ExpandProperty Value $AuthBody = @{ user[name] = $Creds.UserName user[password] = $Creds.Password Auth_Token = $AuthToken Submit = "Login" } $LogonMethod = Invoke-WebRequest -Uri $LoginUri -Body $AuthBody -WebSession $TempSession -Method Post
报错信息
PS C:\Users\diego> $AuthBody = @{ >> user[name] = $Creds.UserName >> user[password] = $Creds.Password >> Auth_Token = $AuthToken >> Submit = "Login" >> } ParserError: Line | 2 | user[name] = $Creds.UserName | ~ | Missing '=' operator after key in hash literal.
对应HTML元素
<input autocomplete="off" autocorrect="off" autocapitalize="off" class="string text required" required="required" aria-required="true" placeholder="Usuário" type="text" value="" name="user[name]" id="user_name"> <input autocomplete="off" autocorrect="off" autocapitalize="off" class="password required" required="required" aria-required="true" placeholder="Senha" type="password" name="user[password]" id="user_password">
我之前用Selenium导出的Python代码里用元素ID作为键可行,但不熟悉Python,想尽量用PowerShell解决。请问怎么构建含方括号键的PowerShell哈希表?能不能通过ID调用输入字段?
解决方案
1. 正确构建含特殊字符的哈希表键
PowerShell中,当哈希表的键包含方括号这类特殊字符时,必须用引号(单引号或双引号)把键包裹起来,避免解析错误:
$AuthBody = @{ 'user[name]' = $Creds.UserName 'user[password]' = $Creds.GetNetworkCredential().Password 'Auth_Token' = $Auth_Token 'Submit' = "Login" }
注意:$Creds.Password返回的是SecureString加密类型,需要用$Creds.GetNetworkCredential().Password转换为明文字符串,才能被表单正确接收。
2. 关于通过ID调用输入字段的问题
Invoke-WebRequest提交表单数据时,是基于HTML元素的name属性而非id属性识别参数的。网站后端只会读取name属性对应的值,所以即使元素有id,也不能直接用id作为哈希表的键来提交请求,必须使用name属性的值。
内容的提问来源于stack exchange,提问作者dkabal
相关产品推荐
相关产品推荐

