PowerShell: запишите значение во входе type=file Форма.

У меня есть вход 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?

5
задан Guy Thomas 26 February 2014 в 07:56
поделиться

3 ответа

Проверьте сообщение Джайкула . Он использует 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' }
4
ответ дан 14 December 2019 в 19:12
поделиться

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

1
ответ дан 14 December 2019 в 19:12
поделиться

Позиция Виндзора, как представляется, док-а/обсуждается здесь

LinFu кажется

StrucureMap кажется на момент 2,5 . SM 2,6 не имеет Reflection.Emit

Хорошее ключевое слово Bingoogleable - AllowPartiallyTrustedCallersAttribute

-121--4460217-

в 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 и выше.

0
ответ дан 14 December 2019 в 19:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: