InternetExplorer.Application,单击复选框,然后使用PowerShell

时间:2019-03-31 17:04:47

标签: powershell internet-explorer

我在选择复选框时遇到问题。我已经能够成功登录并通过ID标记导航,但是此标记没有一个。它仅有的标签是类型和类。

我可以使用$ ie.document.IHTMLDocument3_getElementByTagName(“ input”)找到本节,但找不到任何利用它的方法。

这是我正在使用的html:

<th class="cText sorting_disabled cHeader" rowspan="1" colspan="1" style="width: 5px;" aria-label="">
    <input type="checkbox" class="selectall"> 
</th>

到目前为止我所拥有的:

$ie = New-Object -ComObject "InternetExplorer.Application"
$ie.visible = "true"
$ie.navigate("https://some.site.com") 

while($ie.Busy) { Start-Sleep -Milliseconds 100 }

# login 
$usernameField = $ie.document.IHTMLDocument3_getElementByID("userid")
$passwordField = $ie.document.IHTMLDocument3_getElementByID("Password")
$usernameField.value = "email@domain.com"
$passwordField.value = "supercoolpassword"
$btn_Submit = $ie.document.IHTMLDocument3_getElementByID("btn_signIn")
$btn_Submit.click() 

# go to downloads page 
$ie.navigate("https://some.site.com/pages/mydownloads.aspx") 

# selectall packages to download has me clueless

单击复选框后,结果应是所有复选框都应打勾。

1 个答案:

答案 0 :(得分:0)

这是常见的地方,因此,您必须以不同的方式来对待。

$SiteSource.AllElements | Where{$_.TagName -eq 'input'}

或者,就像它是一个按钮

($ie.Document.IHTMLDocument3_getElementsByTagName('button') | 
Where-Object innerText -eq 'SIGN IN').Click()

但是您如何在网站上行走以获取所需的对象?

在制定编码决策之前我经常使用的方法。

$SiteSource = Invoke-WebRequest -Uri 'SomeUrl'

# single form site
$SiteSource.Forms | Format-List -Force


# multi-form sites
$SiteSource.Forms[0] | Format-List -Force
$SiteSource.Forms[1] | Format-List -Force

# Check for what can be used.
$SiteSource.Forms.Fields
$SiteSource.InputFields

然后收集上面的代码...查找和使用的代码。

$ie = New-Object -com InternetExplorer.Application 
$ie.visible=$true
$ie.navigate('SomeUrl') 

while($ie.ReadyState -ne 4) {start-sleep -m 100}

$UserID = $ie.document.getElementsByTagName('INPUT') | 
Where-Object {$($_.Name) -match 'userid'}
$UserId.value = 'UserID'

$UserPassword = $ie.document.getElementsByTagName('INPUT') | 
Where-Object {$($_.Name) -match 'password'}
$UserPassword.value = 'password'

$Submit = $ie.document.getElementsByTagName('INPUT') | 
Where-Object {$($_.Value) -match 'SomeString'}
$Submit.click()