PowerShell可以等到IE准备好了吗?

Geo*_*ros 8 powershell internet-explorer

我正在写一个脚本,我正在使用

while($IE.busy) {Start-Sleep 1}
Run Code Online (Sandbox Code Playgroud)

等待页面准备好.

页面准备好后,我的脚本会填写并提交表单.我一直遇到问题,因为(我认为)IE报告说它是在页面加载时但在文档被渲染之前完成的(这会导致脚本错误).我目前的解决方法是在页面加载后添加4秒的等待时间,但如果可能的话,我觉得使用非基于时间的方法会更舒服.

and*_*dyb 7

这是我如何做到这一点.

步骤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)