我在选择复选框时遇到问题。我已经能够成功登录并通过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
单击复选框后,结果应是所有复选框都应打勾。
答案 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()