Geo*_*ros 8 powershell internet-explorer
我正在写一个脚本,我正在使用
while($IE.busy) {Start-Sleep 1}
Run Code Online (Sandbox Code Playgroud)
等待页面准备好.
页面准备好后,我的脚本会填写并提交表单.我一直遇到问题,因为(我认为)IE报告说它是在页面加载时但在文档被渲染之前完成的(这会导致脚本错误).我目前的解决方法是在页面加载后添加4秒的等待时间,但如果可能的话,我觉得使用非基于时间的方法会更舒服.
这是我如何做到这一点.
步骤1 - 确定仅在页面完全呈现后才出现的网页元素.我使用Chrome开发人员工具"Elements"视图来显示DOM视图.
步骤2 - 在脚本中建立一个等待循环,轮询该元素的存在或该元素内的文本值.
# Element ID to check for in DOM
$elementID = "systemmessage"
# Text to match in elemend
$elementMatchText = "logged in"
# Timeout
$timeoutMilliseconds = 5000
$ie = New-Object -ComObject "InternetExplorer.Application"
# optional
$ie.Visible = $true
$ie.Navigate2("http://somewebpage")
$timeStart = Get-Date
$exitFlag = $false
do {
sleep -milliseconds 100
if ( $ie.ReadyState -eq 4 ) {
$elementText = (($ie.Document).getElementByID($elementID )).innerText
$elementMatch = $elementText -match $elementMatchText
if ( $elementMatch ) { $loadTime = (Get-Date).subtract($timeStart) }
}
$timeout = ((Get-Date).subtract($timeStart)).TotalMilliseconds -gt $timeoutMilliseconds
$exitFlag = $elementMatch -or $timeout
} until ( $exitFlag )
Write-Host "Match element found: $elementMatch"
Write-Host "Timeout: $timeout"
Write-Host "Load Time: $loadTime"
Run Code Online (Sandbox Code Playgroud)