PowerShell: записать значение в тип ввода = Форма файла. - PullRequest
5 голосов
/ 04 февраля 2010

У меня есть тип ввода = текст поля ввода на веб-странице, которую я загружаю и заполняю значениями, и нажимаю кнопку отправки, которая отлично работает:

$ie=New-Object -comobject InternetExplorer.Application 
$ie.visible=$true 
$ie.Navigate("https://myurl/test.html") 
while($ie.busy){Start-Sleep 1} 
$ie.Document.getElementById("field_firstName").value="Firstname" 
$ie.Document.getElementById("field_lastName").value="Lastname" 
$ie.Document.getElementById("btn_upload").Click() 
while($ie.busy){Start-Sleep 1}

Я также хотел бызаполните поле input type = file c: \ temp \ test.txt и загрузите его.Я прочитал, что из соображений безопасности значение = не поддерживается в браузерах.

Есть ли обходной путь, чтобы сделать это с PowerShell?Может быть, «нажать» кнопку обзора и выбрать файл или использовать sendkeys?

Ответы [ 3 ]

4 голосов
/ 04 февраля 2010

Чек Пост Джайкула .Он использует Watin для автоматизации.Просто скачайте сборку и попробуйте.Я смог установить значение и затем отправить форму следующим образом:

$WatinPath = 'c:\bin\watin\WatiN.Core.dll' #path with downloaded assembly
$watin     = [Reflection.Assembly]::LoadFrom( $WatinPath )

$ie        = new-object WatiN.Core.IE("https://myurl/test.html")
$file1 = $ie.FileUpload('file1') #id of the input
$file1.set('C:\temp\test.txt') # path to the file

# and now just find the button and click on it
$o = $ie.Button('send') #send is id of the submit button
$o.Click()

Я понимаю ваши причины использовать IE вместо WebClient и аналогичных классов, однако, если возможно, используйте их в других случаях.

Редактировать:

Если у вас нет идентификатора элемента, а есть только имя, вы можете попробовать

$f = $ie.FileUpload({param($fu) $fu.GetAttributeValue("name") -eq 'the name you have' })

или

$f = $ie.FileUploads | ? { $_.GetAttributeValue("name") -eq 'the name you have' }
1 голос
/ 04 февраля 2010

Я бы настоятельно рекомендовал использовать WebClient или HttpWebRequest вместо управления IE GUI.Существует пример WebClient с использованием PowerShell.

0 голосов
/ 04 февраля 2010

Да, вам придется использовать маршрут SendKeys, если вы хотите сделать это в IE.Прямой ввод текста в поле заблокирован в IE8 и выше.

...