Я пытаюсь заполнить некоторые текстовые поля ввода / вывода в IE скриптом PowerShell (PoSH), и я использую примеры, представленные в Интернете, включая здесь и здесь .
Однако я не смог получить или идентифицировать текстовые поля с помощью GetElementsByTagName()
- я думаю, что это действует так, как будто они не заполняются в переменной.Я не уверен, что происходит, я искал в интернете (поиски Google), но не видел ничего, что говорило бы о чем-то большем, чем только эти несколько строк кода.
Коди рисунки, а также ошибка для следования:
$url = "[webPage]";
#initialize browser
$ie = New-Object -Com InternetExplorer.Application;
$ie.Visible = $true;
$ie.ParsedHTML;
$ie.Navigate($url);
while ($ie.busy) {Start-Sleep 4}
#get form
$doc = $ie.Document;
$form = $doc.Forms[0];
$inputs = $form.GetElementsByTagName("input");
#fill out form fields
#either this:
$ie.Document.GetElementByID("sys_display.IO:69c7ac57db7f7a00d7efb96c4e9619ae").Value = "Jonathan Rotter"
#or this:
($inputs | where {$_.Name -eq "sys_display.IO:69c7ac57db7f7a00d7efb96c4e9619ae"}).Value = "Test"
Я попытался добавить следующее в начало этого (из здесь ), но без изменений:
[void][System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
Я вижу идентификатор / имя / (имя тега ??) на странице:
![InputField](https://i.stack.imgur.com/TXjJw.png)
Я ввелСкрипт PoSH построчно (чтобы убедиться, что веб-страница загружена правильно) и проверен на выходе, и (в качестве примера) следующая строка приводит к этому сообщению об ошибке:
($inputs | where {$_.Name -eq "sys_display.IO:69c7ac57db7f7a00d7efb96c4e9619ae"}).Value = "Test"
The property 'value' cannot be found on this object. Verify that the
property exists and can be set. At line:1 char:1
+ ($inputs | where {$_.name -eq "sys_display.IO:69c7ac57db7f7a00d7efb96 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
Послевыполняя все шаги, эти две строки показывают следующее:
PS> $inputs | Select-Object Type,Name
type name
---- ----
hidden sysparm_ck
search sysparm_search
PS> $doc.IHTMLDocument3_getElementsByTagName("input") | Select-Object Type,Name
type name
---- ----
hidden sysparm_ck
search sysparm_search
checkbox 843.8919931998148glide_ui_accessibility
checkbox 265.6701858983173glide_ui_compact
checkbox 689.5920854347255glide_ui_short_date_format
radio 884.3975056898055my_home_navigation_page
radio 884.3975056898055my_home_navigation_page
radio 38.12548394764709glide_ui_date_format
radio 38.12548394764709glide_ui_date_format
radio 38.12548394764709glide_ui_date_format
radio theme
radio theme
radio theme
radio theme
radio theme
radio theme
radio theme
radio theme
checkbox 246.5551307536581table_wrap
checkbox 498.31620519246865tabbed_forms
radio 436.6892116346038glide_ui_related_list_t...
radio 436.6892116346038glide_ui_related_list_t...
radio 436.6892116346038glide_ui_related_list_t...
checkbox 693.6896755526656connect_notifications_m...
checkbox 68.17405211392419connect_notifications_d...
checkbox 958.4840125981943connect_notifications_e...
checkbox 276.20029685304047connect_notifications_...
hidden sysparm_ck
search filter
search leftSearch
search
Пожалуйста, помогите указать мне где-нибудь для следующего шага, я не уверен, что мне не хватает.
Edit 20181218 Похоже, поля, которые мне нужны, находятся внутри "iframe".Я все еще борюсь с углублением в это с помощью кода, и я играю с этой найденной строкой Здесь , но я все еще не уверен, как добраться до нее (с поправкой на мою веб-страницу скод выше):
$form=$doc.frames.document.forms
Дает мне больше материала, чтобы посмотреть, , но эти ошибки изменили это:
PS U:\> $ie.document.getElementByID("gsft_main")
Exception from HRESULT: 0x800A01B6
На это и посмотрели еще немного:
$frame=$ie.document.IHTMLDocument3_getElementByID("gsft_main")
Изображения из проверки (F11):
![iframe2](https://i.stack.imgur.com/0Mtbd.png)