Не можете использовать объект InternetExplorer.Application?
У меня есть целый файл кода, который работает безупречно на ПК. Я принес это другому, и оно лопнуло. Я использовал этот фрагмент, и вывод просто пустой, он ничего не получает от объекта. Браузер загружает страницу, хотя.
# Create the IE com object
"Lauching IE process..."
$ie = new-object -com InternetExplorer.Application
$ie.visible = $true
# Navigate to the login page
"Opening $loginPage"
$ie.navigate($loginPage)
"Waiting for page to load..."
# Wait for the page to finish loading
do {sleep 2} until (-not ($ie.Busy))
sleep 2
$ie.document.body.innerHTML
Я нашел некоторые ссылки на модели безопасности IE, работающие от имени администратора и т. Д., И немного возился с ними.
- Скрипт не работает, если я запускаю его от имени администратора
- Я отключил как можно больше безопасности IE
- Понизился с IE 11 до IE 9
Все еще не повезло.
Какие-либо предложения?
Спасибо!
2 ответа
Хорошо, я решил проблему. На основании этого поста:
Powershell System.__ ComObject.document свойство больше не работает под IE 9
Я также заметил, что
$ie.document | Get-Member
Показал guid объекта COM на сломанной машине, и mshtml на хорошей машине. На хорошей машине действительно был установлен Office. Я скопировал
C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\microsoft.mshtml.dll
сломанной машине. Затем в верхней части моего сценария я добавил
Add-Type -Path "C:\dll\Microsoft.mshtml.dll"
И, бинго, скрипт теперь работает как положено!
Я не уверен, что вы сохранили в переменной $ loginPage, поэтому я заменил ее на www.google.com, и она открыла страницу, но не отображала часть.document.body.html.
Я нашел этот форум, на котором обсуждалась проблема, похожая на то, что вы описываете. Они рекомендовали изменить код на
$ie = new-object -com internetexplorer.application
$ie.Visible = $true
$ie.navigate('https://www.google.com')
while($ie.busy){Start-Sleep -Milliseconds 100}
$ie.document.body | select innerhtml
Я попробовал это, и это работало нормально.