2016-04-15 3 views
1

У меня есть сценарий, который переходит на сайт, регистрируется, а затем нажимает кнопку, чтобы загрузить файл на этот сайт.Скрипт Powershell не прогрессирует, пока окно «выбрать файл для загрузки» вверх

После нажатия кнопки появляется подсказка, и я до сих пор понял, что SendKeys является возможным решением. Тем не менее, скрипт застревает после появления окна.

Вот мой Kode:

$upload = $ie.Document.body.getElementsByTagName("input") | Where-Object {$_.Name -match "userfile"} 
$upload.click() 
$wshell.SendKeys("c:\path_to_my_file") 

Я даже попытался тестирования с отложенной записи хоста. В этом случае только печатает на консоли после того как я вручную нажмите кнопку «Отмена» на «Выберите файл для загрузки»

$upload = $ie.Document.body.getElementsByTagName("input") | Where-Object {$_.Name -match "userfile"} 
$upload.click() 

Write-Host "test" 

ответ

0

Вы можете использовать AutoHotkey для этого. Вместо $wshell.SendKeys вы будете использовать функцию AHK Send. Вы можете запустить этот скрипт из сценария powershell или перед ним (он мог дождаться появления диалогового окна выбора и автоматически вставить имя файла, когда он это делает). Это будет идти что-то вроде:

start WaitForPrompt.ahk 
$upload = $ie.Document.body.getElementsByTagName("input") | Where-Object {$_.Name -match "userfile"} 
$upload.click() 

WaitForPrompt.ahk

WinActivate <title of the window that appears> 
Send c:\path_to_my_file 

Другое то, что вы могли бы избежать всего этого (это будет, конечно, работать Тхо) с помощью Invoke-WebRequest и крафта формы POST. Для этого вам нужно посмотреть, какие вещи браузер отправляет на сервер, и у вас есть различные плагины для этого (например, заказы firefox). В Chrome вы можете увидеть это и получить команду curl из инструментов разработчиков, которые могут быть выполнены из оболочки как есть.

+0

Хотелось бы узнать, как это сделать без стороннего программного обеспечения, поэтому такие правила исключают AHK. Invoke-WebRequest выглядит интересно. Есть ли способ заметно следить за его прогрессом, например, в консоли? (например, знать, успешно ли он входит в систему и использует правильную кнопку и т. д.) – user242491

+0

AHK - это инструмент для этого типа вещей (его портативный ~ 300 КБ exe, который вы можете поставить рядом с скриптом, получить его от шоколадного или без разницы..). IMO, он должен быть в Windows с самого начала в качестве встроенного инструмента. – majkinetor

+0

'iwr' не будет нажимать никаких кнопок. Вам необходимо запросить POST-запрос и передать данные формы через аргумент 'body'. См. 'Man iwr -examples'. Это путь более пуленепробиваемый, чем любая отправка ключей и тому подобное. – majkinetor