#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 секунд. Этого должно быть достаточно для загрузки элементов (если они вообще это делают). И ошибки должны быть устранены. Если это сработает, поищите лучший способ подождать.