Что нового

Загрузка файла через форму. Скрипт останавливается

MrDio

Новичок
Сообщения
8
Репутация
0
Приветствую!
Пишу скрипт для автоматического заполнения формы в браузере.
Все получается, но один из пунктов загрузка фотографии (по кнопке "Обзор").
В итоге скрипт кликает по кнопке, открывается диалоговое окно, но после этого скрипт останавливается. Т.е. пока я вручную не нажму на кнопку, например Cancel в диалоговом окне ничего не произойдет.

Ниже пример кода:
Код:
$oIE = _IECreate('https://url_here')
$oForm = _IEFormGetCollection ($oIE, 0)
$oInputFile = _IEFormElementGetObjByName($oForm, "image")
_IEAction($oInputFile, 'click')
ConsoleWrite(' 1 ')
WinWait("Choose File to Upload")
ConsoleWrite(' 2 ' & $hChoose)
$hChoose = WinGetHandle("Choose File to Upload")
ConsoleWrite(' 3 ' & $hChoose)
ControlSetText($hChoose, "", "Edit", "G:\WebServers\home\thomann\www\item_pics\19424\item_1.jpg")
ConsoleWrite(' 4 ')
ControlClick($hChoose, "", "Button")
ConsoleWrite(' 5 ')


В итоге скрипт открывает диалоговое окно эксполорера "Choose File to Upload" и замирает. Т.е. дальше ничегоне происходит.
ConsoleWrite(' 1 ') не выводит 1 в консоль. Нужно либо вручную выбирать файл, либо просто нажать кнопку Cancel, тогда скрипт продолжит свое выполнение.

Кто-нибудь сталкивался с таким?
Я гуглил активно. В итоге нашел такой же топик, но там вопрос так и остался не решенным: autoitscript.com/forum/topic/117643-script-doesnt-continu-after-choose-file-to-upload-ie-window/

Подскажите плиз, что не так.
 
Автор
M

MrDio

Новичок
Сообщения
8
Репутация
0
Спасибо.
Со вчерашнего дня перечитал все эти и смежные темы. Но всеравно не получается. Я понял слеюующее:
1. Замирание скрипта, при нажатии кнопки "Обзор" медодом _IEAction($oInputFile, 'click') является нормальным. Т.е. скрипт ожидает от нас выбора файла вручную.
2. Чтобы этого избежать мы пытаемся иммитировать нажатие кнопки, например, таким кодом:
$oIE.document.parentWindow.execScript("setTimeout(function(){document.getElementByName('image').click()},1)")
Но в итоге после исполнения этот код не вызывает никаких действий. Т.е. окно выбора файла не появляется.

Инструмент autoit-script.ru/index.php/topic,9577.0.html _IE_FormInspector - работает в тестовом примере, но в на мой УРЛ avito.ru/additem ругается:

Код:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "G:\Autoit\222.au3"    
"G:\Autoit\222.au3" (96) : ==> The requested action with this object has failed.:
If $o_Element.type <> "" Then $s_TextOut &= @TAB & "[type -> " & $o_Element.type & "]" & @CRLF
If $o_Element^ ERROR
>Exit code: 1    Time: 2.414

Вот как-то так...
Неужели нет какого-то простого стандартного решения по загрузке файла? Задача-то, вроде, абсолютно тривиальная, ну стандартней некуда. Неужели нет какого-то готового кода?
 

alex33

Скриптер
Сообщения
1,457
Репутация
185
MrDio сказал(а):
Но в итоге после исполнения этот код не вызывает никаких действий. Т.е. окно выбора файла не появляется.
Вот так будет правильно:
Код:
document.getElementById('image').click()

Код:
document.getElementsByName('image').item(0).click()
JavaScript:
document.getElementsByName('image')[0].click()
 
Автор
M

MrDio

Новичок
Сообщения
8
Репутация
0
Большое спасибо за помощь!
Рабочие варианты:
Код:
$oIE.document.parentWindow.execScript("setTimeout(function(){document.getElementsByName('image')[0].click()},1)")

или
Код:
$oIE.document.parentWindow.execScript("setTimeout(function(){document.getElementsByName('image').item(0).click()},1)")
 
Верх