none
powershell дождаться загрузки страницы в ie RRS feed

  • Вопрос

  • часто в скрипте powershell нужно подождать
    пока страничку в ie загрузится
    Обычно в таком случае я использую такой код

    $ie.navigate($url)
    while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 }
    $doc.Forms | Select -Index 1 | % { $_.Submit() }
    while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 }
    $ie.Quit()

    Но такое ощущение, что данный код не всегда срабатывает.
    К примеру очень часто страница оказывается не "засабмиченной"
    Как будто $ie.Quit() выполняется прежде чем страница сабмитится
    Если код выполнять в ручном режиме.
    ОН успешно работает каждый раз.
    Если код автоматом выполнять сразу весь. Страница иногда сабмитится иногда нет.

    Подскажите насколько хороша строка кода
    while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 }
    Можно ли ее заменить чем нибудь более надежным.

    Можно конечно использовать
    start-sleep -second 5
    Но так мне код кажется с виду еще тапорнее
    несмотря на то что работает более стабильно.



    13 октября 2013 г. 18:59

Ответы

  • Опробовал
    while (!$ie.Document.Forms) {Start-Sleep -Seconds 1 }
    Но ситуация не изменилась.
    После длительного исследования оказалось, что задержка нужна там где я не предполагал, что она нужна.

    $ie.navigate($url)
    while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 } <- эта строчка вполне хорошо выполняет свое назначение
    $doc = $ie.document
    $forms = $ie.Document.forms.Item(1)
    $forms.Item(23).Value = "icq"
    Start-Sleep -Seconds 1 # <- оказалось тут тоже нужна задержка. Иначе изменения не успевают примениться
    $doc.Forms | Select -Index 1 | % { $_.Submit() }
    while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 } <- эта строчка вполне хорошо выполняет свое назначение
    $ie.Quit()

    • Помечено в качестве ответа korggrodno3 15 октября 2013 г. 3:55
    15 октября 2013 г. 3:44

Все ответы

  • Можно попробовать проверять сам объект:

    while (!$ie.Document.Forms) {Start-Sleep -Seconds 1 }

    $doc.Forms | Select -Index 1 | % { $_.Submit() }



    • Изменено KazunEditor 14 октября 2013 г. 18:54
    14 октября 2013 г. 14:36
    Отвечающий
  • Опробовал
    while (!$ie.Document.Forms) {Start-Sleep -Seconds 1 }
    Но ситуация не изменилась.
    После длительного исследования оказалось, что задержка нужна там где я не предполагал, что она нужна.

    $ie.navigate($url)
    while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 } <- эта строчка вполне хорошо выполняет свое назначение
    $doc = $ie.document
    $forms = $ie.Document.forms.Item(1)
    $forms.Item(23).Value = "icq"
    Start-Sleep -Seconds 1 # <- оказалось тут тоже нужна задержка. Иначе изменения не успевают примениться
    $doc.Forms | Select -Index 1 | % { $_.Submit() }
    while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 } <- эта строчка вполне хорошо выполняет свое назначение
    $ie.Quit()

    • Помечено в качестве ответа korggrodno3 15 октября 2013 г. 3:55
    15 октября 2013 г. 3:44