PowerShell не показывает страницу после входа в систему

#powershell #internet-explorer #web-scraping #scripting

Вопрос:

Это и есть код:

 $ie = New-Object -ComObject 'internetExplorer.Application'
$ie.Visible= $true # Make it visible

$username="name.surname@myemail.com"

$password="MyPassword"

$ie.Navigate("https://service.post.ch/zopa/dlc/app/?service=dlc-webamp;inMobileApp=falseamp;inIframe=falseamp;lang=fr#!/main")

While ($ie.Busy -eq $true) {Start-Sleep -Seconds 3;}

$usernamefield = $ie.document.getElementByID('isiwebuserid')
$usernamefield.value = "$username"

$passwordfield = $ie.document.getElementByID('isiwebpasswd')
$passwordfield.value = "$password"

$Link = $ie.document.getElementByID('actionLogin')
$Link.click()

while($ieobject.Busy) { Start-Sleep -seconds 10 }


$ie.Quit()
 

Как вы можете видеть из видео на сайте post.ch открывается, но затем окно закрывается, даже если я установил Start-Sleep -seconds 10 ранее $ie.Quit()

Это заставляет меня думать, что, вероятно, сценарий работает, но я не уверен, что произойдет на следующей странице.

введите описание изображения здесь

Браузер просто закрывается.

Есть идеи, что происходит?

Вы также можете создать учетную запись на этом веб-сайте, если хотите протестировать.

Ошибка гласит:

 Exception from HRESULT: 0x800A01B6
At C:UsersfmvDesktopImport Ref Data scriptsgetPosteDataUAT.ps1:12 char:1
  $usernamefield = $ie.document.getElementByID('isiwebuserid')
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : OperationStopped: (:) [], NotSupportedException
      FullyQualifiedErrorId : System.NotSupportedException

The property 'value' cannot be found on this object. Verify that the property exists and can be set.
At C:UsersfmvDesktopImport Ref Data scriptsgetPosteDataUAT.ps1:13 char:1
  $usernamefield.value = "$username"
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      FullyQualifiedErrorId : PropertyNotFound

Exception from HRESULT: 0x800A01B6
At C:UsersfmvDesktopImport Ref Data scriptsgetPosteDataUAT.ps1:15 char:1
  $passwordfield = $ie.document.getElementByID('isiwebpasswd')
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : OperationStopped: (:) [], NotSupportedException
      FullyQualifiedErrorId : System.NotSupportedException

The property 'value' cannot be found on this object. Verify that the property exists and can be set.
At C:UsersfmvDesktopImport Ref Data scriptsgetPosteDataUAT.ps1:16 char:1
  $passwordfield.value = "$password"
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      FullyQualifiedErrorId : PropertyNotFound

Exception from HRESULT: 0x800A01B6
At C:UsersfmvDesktopImport Ref Data scriptsgetPosteDataUAT.ps1:18 char:1
  $Link = $ie.document.getElementByID('actionLogin')
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : OperationStopped: (:) [], NotSupportedException
      FullyQualifiedErrorId : System.NotSupportedException

You cannot call a method on a null-valued expression.
At C:UsersfmvDesktopImport Ref Data scriptsgetPosteDataUAT.ps1:19 char:1
  $Link.click()
  ~~~~~~~~~~~~~
      CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      FullyQualifiedErrorId : InvokeMethodOnNull
 

Комментарии:

1. Одно дело, while($ieobject.Busy) должно быть while($ie.Busy) . Почему вы получаете значение null для элементов, я не могу сказать.

2. @Даниэль, это сработало! Вы хотите опубликовать свой ответ? Я буду называть его правильным. Спасибо

Ответ №1:

While ($ie.Busy -eq $true) это недопустимый способ дождаться загрузки веб-сайта. К сожалению, нет стандартного способа определить, что веб-сайт полностью загружен. Javascript может загружать данные в любое время позже или навсегда.

Поэтому вы должны сами определить свое состояние «полностью загружено». Например, вы можете подождать, пока не появится определенный элемент.

Кроме того, похоже, что веб-сайт вообще не загружается в IE. Таким образом, элементы никогда не будут доступны в этом браузере (по крайней мере, на моем компьютере). Однако это работает в Edge и Firefox.

Если веб-сайт загружается в вашем IE, вы можете заменить While ($ie.Busy -eq $true) ... его просто Start-Sleep -Seconds 10 . Так что вы обязательно подождите 10 секунд. Этого должно быть достаточно для загрузки элементов (если они вообще это делают). И ошибки должны быть устранены. Если это сработает, поищите лучший способ подождать.