Что нового

Заполнение данных в IE (Value)

Dk

Новичок
Сообщения
358
Репутация
2
Версия AutoIt: 3.2.14

Описание:
Помогите пожалуйста заполнить вот это.
К сожалению саму ссылку не могу дать, нужно регистрироваться.

Код:
<input id="cardpan" type="text" value="" autocomplete="off" style="background: linear-gradient(rgb(230, 230, 230) 0%, rgb(255, 255, 255) 100%) padding-box; border: 1px solid rgb(192, 192, 192); border-radius: 6px; height: 28px; line-height: 28px; padding: 0px 7px; margin: 0px 5px 0px 0px; color: rgb(0, 66, 118); font-size: 14px; font-weight: bold; float: none; display: inline-block; width: 208px;">

Пробую этим способом
Код:
local $sNummer ="123456789"
 $oNummer = _IEGetObjById($oIE, 'cardpan')
  _IEFormElementSetValue($oNummer, $sNummer)


Но не выходит.
Всегда пользовался таким вариантом, для автоматической регистрации, но тут никак.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
В html-коде id="cardpan". А вы запрашиваете "cardcvc2".
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
В html-коде id="cardpan". А вы запрашиваете "cardcvc2".

То я ошибся. Я исправил.
Я запрашивал cardpan.
Запутался вставил не тот пример.

Поле ввода по прежнему не заполняется.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Я сохранил строку в test.html и всё прекрасно заполняется в IE11 на Win7x86
Код:
#include <IE.au3>

$oIE = _IECreate("file:\\" & @ScriptDir & "\test.html")
local $sNummer ="123456789"
$oNummer = _IEGetObjById($oIE, 'cardpan')
_IEFormElementSetValue($oNummer, $sNummer)
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Я сохранил строку в test.html и всё прекрасно заполняется в IE11 на Win7x86

Решил так же попробывать. (IE11 на Win8.1 x86)
Выдаёт

IE.au3 T3.0-1 Error from function _IELoadWait, $_IESTATUS_ClientDisconnected (-2147417848, Browser has been deleted prior to operation.)
--> IE.au3 T3.0-1 Error from function _IEGetObById, $_IESTATUS_InvalidObjectType
--> IE.au3 T3.0-1 Error from function _IEFormElementSetValue, $_IESTATUS_InvalidDataType
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Попробуйте с правами администратора
Код:
#RequireAdmin
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Попробуйте с правами администратора
Код:
#RequireAdmin
Да, так работает. Но к сожалению только если по вашему примеру (то есть с отдельным html).
На самой странице по прежнему ничего не заполняет.
IE.au3 T3.0-1 Error from function _IEFormElementSetValue, $_IESTATUS_InvalidObjectType

Я понимаю, что Вам трудно определить без полной "картины".
Там идёт заполнение кредитной карты.
Возможна ли защита какая то на странице?
Но может есть принципиально другой способ определения и ввода ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Dk [?]
Возможна ли защита какая то на странице?
Всё может быть. Попробуйте через focus и ControlSend
Код:
#RequireAdmin
#include <IE.au3>

$oIE = _IECreate("file:\\" & @ScriptDir & "\test.html")
local $sNummer ="123456789"
$oNummer = _IEGetObjById($oIE, 'cardpan')
_IEAction($oNummer, "focus")
ControlSend("[class:IEFrame]", "", "Internet Explorer_Server1", $sNummer)
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Dk [?]
Возможна ли защита какая то на странице?
Всё может быть. Попробуйте через focus и ControlSend

К сожалению тоже самое.
Попробывал нo тоже нет.
Очень странно.

Если у Вас есть время, напишите пожалуйста для FireFox тоже самое.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Dk [?]
для FireFox тоже самое
Это будет совсем не то же самое.

Попробуйте простейший скрипт
Код:
Sleep(3000)
Send("123")
Запустите. В течение 3 сек вручную кликните в поле ввода на странице и убедитесь, что Send не работает. Если работает, то можно попробовать имитировать клик мыши в поле ввода.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Dk [?]
для FireFox тоже самое
Это будет совсем не то же самое.

Попробуйте простейший скрипт
Код:
Sleep(3000)
Send("123")
Запустите. В течение 3 сек вручную кликните в поле ввода на странице и убедитесь, что Send не работает. Если работает, то можно попробовать имитировать клик мыши в поле ввода.

Да, так работает.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Запускать при загруженной странице
Код:
#include <UIAutomate.au3> ; http://autoit-script.ru/index.php/topic,16780.0.html

$oIE = _UIA_GetElementFromHandle(ControlGetHandle("[class:IEFrame]", "", "Internet Explorer_Server1"))
$oEdit = _UIA_GetControlTypeElement($oIE, "UIA_EditControlTypeId", "cardpan", "AutomationId")

; сначала попробуйте так
_UIA_ElementTextSetValue($oEdit, "123456789")

; если не получится, тогда так
;~ _UIA_ElementMouseClick($oEdit)
;~ Send("123456789")
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Запускать при загруженной странице

К сожалению я скорее всего не успею протестировать сегодня, мне нужно срочно отлучится.
Но я очень благодарен Вам за вашу помощь. Пожалуйста не воспринимайте это как невежество с моей стороны.

Забегу немного наперёд
Вы написали что уже при загруженной странице...
У меня смысл такой, что идёт сначала Логин на сайт, потом нажатия на разные кнопки и потом я попадаю на эту страницу и ставлю галочку (Галочку находит - нажимает) оплатить картой, cтраница остаётся той же не перезагружается, просто появляется это окно ввода.
Будет ли тогда работать ваш код? Ведь изначально открывается совершенно другая страница и только потом я попадаю туда.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Dk [?]
Будет ли тогда работать ваш код?
Откуда я знаю, если я не вижу страницы?! :stars:
Код работает с содержимым IE на момент запуска скрипта. И это вы мне должны сказать - работает он или нет.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Dk [?]
Будет ли тогда работать ваш код?
Откуда я знаю, если я не вижу страницы?! :stars:
Код работает с содержимым IE на момент запуска скрипта. И это вы мне должны сказать - работает он или нет.

Супер. Работает!
Огромное спасибо!


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
Запускать при загруженной странице
Здравствуйте. У меня возник дополнительный вопрос по поводу вашего скрипта.
Если я пытаюсь заполнить несколько полей, то остаётся только последнее заполненное поле. То есть скрипт заполняет первое поле, потом стирает его, заполняет следующее итд.
Я пытался сделать вот так.
Код:
$oIE = _UIA_GetElementFromHandle(ControlGetHandle("[class:IEFrame]", "", "Internet Explorer_Server1"))
$oEdit = _UIA_GetControlTypeElement($oIE, "UIA_EditControlTypeId", "cardpan", "AutomationId")
_UIA_ElementTextSetValue($oEdit, "12121212")
Sleep(1000)
$oEdit2 = _UIA_GetControlTypeElement($oIE, "UIA_EditControlTypeId", "cardcvc2", "AutomationId")
_UIA_ElementTextSetValue($oEdit2, "999")

Как заполнить к примеру 2 поля?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Пробуйте по второму варианту - через _UIA_ElementMouseClick и Send.

Спасибо работает.

Самый последний вопрос появился. Не знаю нужно ли открывать новую тему.
В этой анкете так же находится "проблемный" - нестандартный dropdownlist.
Вот он.

Код:
<select id="cardexpiremonth" style="background: linear-gradient(rgb(230, 230, 230) 0%, rgb(255, 255, 255) 100%) padding-box; border: 1px solid rgb(192, 192, 192); border-radius: 6px; height: 28px; line-height: 28px; margin: 0px 5px 0px 0px; color: rgb(0, 66, 118); font-size: 14px; font-weight: bold; float: none; display: inline-block; padding: 4px;"><option value="0"></option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option></select>

В нём 12 элементов (1,2,3,4,5,6 итд) из которых нужно выбрать один.
Как мне нажать на dropdownlist и выбрать к примеру 9 ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Dk [?]
нестандартный dropdownlist
Тренировался, как обычно, на файле
Код:
#RequireAdmin
#include <IE.au3>

$oIE = _IECreate("file:\\" & @ScriptDir & "\test.html")
$oCombo = _IEGetObjById($oIE, 'cardexpiremonth')
_IEAction($oCombo, "focus")
Send("{home}") ; очистка, если нужно
Send("11")
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
InnI сказал(а):
Dk [?]
нестандартный dropdownlist
Тренировался, как обычно, на файле

Нет. К сожалению не работает. Я же говорю в этой анкете поля ввода и dropdownlist не работают с _IEGetObjById,
Все остальные анкеты работают, но как только перехожу на заполнение кредитной карты сразу перестаёт работать. Только Ваш метод с _UIA_GetControlTypeElemen работает. Но как применить его c dropdownlist.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
#include <UIAutomate.au3>

$oIE = _UIA_GetElementFromHandle(ControlGetHandle("[class:IEFrame]", "", "Internet Explorer_Server1"))

$oCombo = _UIA_GetControlTypeElement($oIE, "UIA_ComboBoxControlTypeId", "cardexpiremonth", "AutomationId")
_UIA_ElementMouseClick($oCombo)
Send("11{enter}")
 
Верх