У меня есть вход type=text inputboxes на веб-странице, которую я загружаю и заполняю значениями и нажимаю кнопку отправки, которая хорошо работает:
$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}
Я также хотел бы заполнить вход type=file поле с c:\temp\test.txt и загрузить это. Я считал, что из-за соображений безопасности значение = не поддерживается от браузеров.
Там какое-либо обходное решение должно сделать это с PowerShell? Возможно, "нажмите" кнопку обзора и выберите файл или используйте sendkeys?
Проверьте сообщение Джайкула . Он использует 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' }
Я настоятельно рекомендую использовать WebClient или HttpWebRequest вместо управления IE GUI. Существует пример WebClient с использованием PowerShell.
Позиция Виндзора, как представляется, док-а/обсуждается здесь
StrucureMap кажется на момент 2,5 . SM 2,6 не имеет Reflection.Emit
Хорошее ключевое слово Bingoogleable - AllowPartiallyTrustedCallersAttribute
в Ruby 1,8, модуль ParseDate преобразует этот и многие другие форматы даты/времени. Тем не менее, это не изящно относится к двоеточию между годом и часом. Предполагая, что двоеточие является опечаткой и на самом деле является космосом, тогда:
#!/usr/bin/ruby1.8
require 'parsedate'
s = "30/Nov/2009 16:29:30 +0100"
p Time.mktime(*ParseDate.parsedate(s)) # => Mon Nov 30 16:29:30 -0700 2009
-121--779678- Да, вам придется использовать маршрут SendKeys, если вы хотите сделать это в IE. Прямой ввод текста в поле блокируется в IE8 и выше.