首页 > 解决方案 > 使用令牌形成 Click()

问题描述

这是我正在尝试做的事情:

  1. 打开一个站点并单击“我接受”按钮以接受条款。(作品
  2. 上面将我重定向到我输入用户名和密码的登录页面。(作品
  3. 点击“登录”。(失败,但我没有错误)

我启用了保护模式,尽管我无法以系统管理员身份运行脚本。还有一点是,当单击“登录”按钮时,该站点似乎发布了一个令牌。知道为什么解决方案不起作用吗?

HTML:

<form id="mainform" method="post" autocomplete="off" action="/URL/" onsubmit="submitHandler(); return true;">
<table class="loginTable">

...

<tr>
  <td colspan="2" class="colSpanRow" id="loginSubmitTd">
    <input type="submit" value="Log in" tabindex="4" id="loginSubmit" />
  </td>
</tr>

电源外壳:

$ie = New-Object -ComObject 'InternetExplorer.Application'
$ie.Visible = $true
$ie.Navigate("url")

Start-Sleep -s 2

$link = @($ie.Document.GetElementsByTagName('A')) |
        Where-Object {$_.InnerText -eq 'I accept'}
$link.Click()

Start-Sleep -s 5

$ie.Document.IHTMLDocument3_getElementById('username').Value = "username"
$ie.Document.IHTMLDocument3_getElementById('password').Value = "pw"

$submitButton = @($ie.Document.IHTMLDocument3_getElementsByTagName('input')) |
                Where-Object {$_.Value -eq 'Log in'}
Write-Host $submitButton.id
$submitButton.Click()

标签: formspowershellclicktoken

解决方案


我建议你避免使用IHTMLDocument3_getElementsByTagName和使用该getElementsByTagName功能。

在您的代码中,这将是

$submitButton = @($ie.Document.getElementsByTagName('input')) | Where-Object {$_.value -eq 'Log in'}

或者甚至更好:

$submitButton = $ie.Document.getElementById('loginSubmit')

推荐阅读