|
|
|
| вообщем проблема такая
нужно имитировать искусственный интеллект, точнее его поведение на странице при помощи javascript
есть текст
var text = 'текст';
имеются N форм на странице, задаются координаты любой формы, требуется в эту форму ввести текст. Думаю алгоритм такой:
- имитировать клик
- по клику определить элемент
- получить доступ к элементу
- внести в него текст
может у кого-нибудь другие идеи?
для чего надо? - нужно имитировать пользователя, если есть другие варианты решения, предложите пожалуйста
ещё раз напомню проблему - нужно дать координаты (X,Y) на любой элемент на странице и в него внести текст
в поиск не отправляйте))
ничего не нашёл стоящего, или то что нуэно доработать, а я чайник
вообщем есть только функция имитации клика.. и то не работает как надо..
код такой
<script>
function test(){
alert('ss');
}
</script>
<div style="width: 100px; height: 100px; border: black 1px solid;" onClick="test();"></div>
<script>
function simulateClick(x, y) {
var el = document.elementFromPoint(x, y);
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
1, 0, 0, x, y,
false, false, false, false, 0, null);
el.dispatchEvent(evt);
}
</script>
<a href="" onclick="javascript: simulateClick(250, 250);">111</a>
требуется чтобы функция simulateClick() работала из под другой функции
<script>
fucntion other(){
simulateClick(20,20);
</script>
|
а она никак не хочет ( | |
|
|
|
|
|
|
|
для: zmax
(08.08.2009 в 12:56)
| | В коде у вас написано simulateClick, т.е. СИМУЛЯЦИЯ, а в тексте вопроса вы употребляете термин ИМИТАЦИЯ.
Разница между этими терминами (ИМИТАЦИЯ и СИМУЛЯЦИЯ) принципиальна, хотя люди часто эти понятия смешивают.
ИМИТАЦИЯ - это ВОСПРОИЗВЕДЕНИЕ процесса.
СИМУЛЯЦИЯ - это создание ложного ПРЕДСТАВЛЕНИЯ О РЕЗУЛЬТАТАХ процесса.
Объясню на пальцах.
Механическое пианино ИМИТИРУЕТ процесс игры на пианино - вы не только слышите музыку, но и видите, как нажимаются клавиши. См. видеоролик.
Приняв щепоть толченого графита от карандашного грифеля и две таблетки эфедрина за два часа до посещения врача, и сильно потерев глаза непосредственно перед входом в кабинет, вы СИМУЛИРУЕТЕ своё болезненное состояние, "подтверждая" его показаниями градусника (от принятого накануне он покажет где-то 38 градусов). Самого процесса реальной болезни вы не воспроизводите.
В Javascript'e нельзя имитировать.
В Javascript'e можно только симулировать.
ИМИТИРОВАТЬ процесс клика по объекту с помощью Javascript'a вам не удастся - "подвести" курсор мыши к объекту с последующим видимым и слышимым щелчком кнопки мыши сделать у вас НЕ ПОЛУЧИТСЯ. И ни у кого не получится. Принудительное движение курсора мыши (и его кнопок) Javascript'у неподвластно.
Вы можете только СИМУЛИРОВАТЬ результат клика по объекту. Т.е. в вашем случае вы сможете добиться, чтобы браузеру "подумалось", что юзер реально кликнул по объекту и чтобы браузер вызвал функцию test ().
-----
Теперь о вашем коде.
Не работает код у вас потому, что предназначен он только и исключительно для браузера FireFox версии выше 3.0, ибо только в нём одновременно работают методы elementFromPoint () и initMouseEvent ("click"). А проверяете вы, видимо, в каком-то ином браузере.
Хотя, может быть, и в нём работать не будет - сейчас это проверить не могу, ибо Лис-тройка на домашнем компе у меня отсутствует. | |
|
|
|
|
|
|
|
для: PAT
(08.08.2009 в 14:54)
| | спасибо за столь развернутый ответ :)
да, требуется симулировать нажатие кнопки, к сожалению из всех возможных изысканий нашёл только эти функции для моей задачи.
если сможете подсказать альтернативные, буду очень благодарен :)
это по одной части задачи, а вторая часть свелась к получению элемента по координатам (X,Y) | |
|
|
|
|
|
|
|
для: zmax
(08.08.2009 в 15:12)
| | Код, работающий в MSIE и Opera, могу дать:
<script>
function test ()
{
alert ('ss');
}
function simulateClick (x, y)
{
document.elementFromPoint (x, y).onclick ();
}
</script>
<body>
<div style="width: 100px; height: 100px; border: black 1px solid" onClick="test ()"></div>
<a href="javascript: void (1)" onclick="simulateClick (40, 40); return false">111</a>
</body>
| Для FireFox всё сложнее, ибо метод elementFromPoint () работает там только с версии 3.0. Но вполне можно - надо узнать координаты абрисов ВСЕХ объектов страницы, определить иерархию и видимость ВСЕХ объектов страницы и потом по данным координатам определить - по какому же объекту (из ВСЕХ имеющихся) надо кликнуть. Если кому здесь делать особо нечего, то он вам поможет :-)
PS. Обратите внимание на запись ссылки:
а) протокол javascript: используется ТОЛЬКО в атрибуте HREF тега <A> и НИГДЕ БОЛЕЕ. Если где-то в другом месте протокол javascript: встретите, то знайте - ИДИОТ такое написал;
б) если вам надо, чтобы по клику по ссылке чего-то делалось, но не происходило того ГЛАВНОГО, для чего ссылка предназначена (т.е. чтобы не было ПЕРЕХОДА на другую страницу), то ОБЯЗАТЕЛЬНО надо использовать в конце инструкции return false. Если же return false встретите в инструкции для ONCLICK на каком-то другом теге, кроме тега <A>, то знайте - ИДИОТ такое написал. | |
|
|
|
|
|
|
|
для: PAT
(08.08.2009 в 15:25)
| | нет, вы меня не поняли
нужно чтобы функция simulateClick вызывалась вот так
<script>
function test ()
{
alert ('ss');
}
function simulateClick (x, y)
{
document.elementFromPoint (x, y).onclick ();
}
function other(){
simulateClick (40, 40);
}
other();
</script>
|
т.е. вызывалась из другой функции
а есть какие-нибудь советы по получению элемента по координатам (X,Y)? | |
|
|
|
|
|
|
|
для: zmax
(08.08.2009 в 15:34)
| | Хм...
Надо, так и вызывайте. Кто мешает-то?
Вместо строки, выделенной жирно в моём коде, пропишите:
<script>
function other ()
{
simulateClick (40, 40);
}
other ();
</script>
|
>"есть какие-нибудь советы по получению элемента по координатам (X,Y)?"
Я, по-моему, всё достаточно подробно "насоветовал" выше - вы разве не читали моё предыдущее сообщение? Подсказываю - в том абзаце моих "советов" несколько раз употреблено слово ВСЕХ в верхнем регистре. | |
|
|
|
|
|
|
|
для: PAT
(08.08.2009 в 15:37)
| | спасибо, с кликом разобрался :)
а насчёт второго
>надо узнать координаты абрисов ВСЕХ объектов страницы
вот как это делается? | |
|
|
|
|