Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2010, 23:27
Новичок на форуме
Отправить личное сообщение для Toxa Посмотреть профиль Найти все сообщения от Toxa
 
Регистрация: 09.04.2010
Сообщений: 9

Эмулировать клик мышью
Доброго времени суток! Передо мной встала не совсем простая задача.
Пишу скрипт под грейсманки для автоматического сбора подарков с одного сайта. Речь о сервисе http://findpresent.net/. Если вы не знакомы с ним, можете посмотреть примеры реализации там же.
Ну так, собственно, код

var images = document.getElementsByTagName("img")
				for(var i=0;i<=images.length;i++) {
					if(images[i].src.indexOf("http://findpresent.net/uploads/") !== -1) {
						//alert(images[i].parentNode.tagName)
						//alert("success!")
						try{
							clickevent=document.createEvent("MouseEvents")
							clickevent.initEvent("click", true, true)
							images[i].dispatchEvent(onclick)
							//images[i].parentNode.onclick()
						} catch(e) {
						alert(e)
						}
					}
				}

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

[Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: file:///C:/Documents%20and%20Settings/%D0%9F%D0%B0%D0%BF%D0%B0/Application%20Data/Mozilla/Firefox/Profiles/o0e7txnf.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js :: anonymous :: line 385"  data: no]


Еще могу добавить, что изображения генерируются в дивах скриптом, подгруженным с сайта findpresent
Получить ссылку на картинку и на див не составляет труда, а вот кликнуть по нему...

пробовал варианты
images[i].onclick()

images[i].dispatchEvent(onclick)
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2010, 23:52
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

FF вроде позволяет сделать .click()
и не стоит испытвать сразу ВСЕ способы в одном try-catch
первый же не сработанный НЕ позволит выполнится всем остальным
Ответить с цитированием
  #3 (permalink)  
Старый 23.12.2010, 00:15
Новичок на форуме
Отправить личное сообщение для Toxa Посмотреть профиль Найти все сообщения от Toxa
 
Регистрация: 09.04.2010
Сообщений: 9

Сообщение от Gvozd Посмотреть сообщение
FF вроде позволяет сделать .click()
пробовал, не работает!

Сообщение от Gvozd Посмотреть сообщение
и не стоит испытвать сразу ВСЕ способы в одном try-catch
первый же не сработанный НЕ позволит выполнится всем остальным
Ну конечно же я делал по-отдельности! Там же лишние строки закомментированны.
Вопрос остается открытым.
Ответить с цитированием
  #4 (permalink)  
Старый 23.12.2010, 00:25
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

значит не пытайтесь эмулировать клик.
делайте сразу то, что должно происходить во время клика
Ответить с цитированием
  #5 (permalink)  
Старый 23.12.2010, 12:25
Новичок на форуме
Отправить личное сообщение для Toxa Посмотреть профиль Найти все сообщения от Toxa
 
Регистрация: 09.04.2010
Сообщений: 9

попробовал разобраться в скрипте

http://pastebin.com/2nzdgT0a

не понимаю, почему классы именуются буквами a,b,c,d,ect. ?
Ответить с цитированием
  #6 (permalink)  
Старый 23.12.2010, 12:35
Интересующийся
Отправить личное сообщение для Hron Посмотреть профиль Найти все сообщения от Hron
 
Регистрация: 07.04.2010
Сообщений: 11

Я видел пару таких скриптов, но они были в одну строчку записаны. Возможно это результат компрессии.
Ответить с цитированием
  #7 (permalink)  
Старый 23.12.2010, 13:12
Новичок на форуме
Отправить личное сообщение для Toxa Посмотреть профиль Найти все сообщения от Toxa
 
Регистрация: 09.04.2010
Сообщений: 9

да, именно так скрипт

Сообщение от Toxa Посмотреть сообщение
http://pastebin.com/2nzdgT0a
был записан в строчку, я так понимаю это набор классов для работы сервиса findpresent.net
Кстати, greasemonkey позволяет видеть глобальные переменные? если на сайте присутствует jquery, а из моего скрипта (следуя) вызов
alert(typeof window.$) // undefined :(
Ответить с цитированием
  #8 (permalink)  
Старый 23.12.2010, 18:08
Новичок на форуме
Отправить личное сообщение для Toxa Посмотреть профиль Найти все сообщения от Toxa
 
Регистрация: 09.04.2010
Сообщений: 9

И еще, возможно ли подключить внешний скрипт из greasemonkey? что значат следующие строки?

(function() {
	var host = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'findpresent.net';
	document.write('<sc'+'ript type="text/javascript" src="'+host+'/js/p.load.js?t='+(new Date()).getTime()+'"></sc'+'ript>');
})();
Ответить с цитированием
  #9 (permalink)  
Старый 27.12.2010, 11:07
Новичок на форуме
Отправить личное сообщение для Toxa Посмотреть профиль Найти все сообщения от Toxa
 
Регистрация: 09.04.2010
Сообщений: 9

дабы не плодить новых тем задам вопрос здесь
Что значат следующие строки?
Function.prototype.bind = function (a)
{
    var b = this;
    return function ()
    {
        return b.apply(a, arguments);
    }
};
Ответить с цитированием
  #10 (permalink)  
Старый 27.12.2010, 13:02
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Эта функция делает так, что все последующие вызовы будут относиться к другому контексту:

<script type='text/javascript'>
Function.prototype.bind = function (a)
{
    var b = this;
    return function ()
    {
        return b.apply(a, arguments);
    }
};

var foo = function () {
	alert(this);
};

foo(); // window
foo = foo.bind("test");
foo(); // "test"
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
клик по iFrame slivka_83 Общие вопросы Javascript 3 18.04.2014 20:33
Эмулировать клик мыши по ссылке Logo Events/DOM/Window 6 22.11.2010 17:50
HTML5 Как сделать, чтобы можно было двигать картинку мышью? Бобр Общие вопросы Javascript 2 18.06.2010 21:22
Клик в определенной точке документа PeaceCoder Общие вопросы Javascript 3 28.01.2010 22:27
Скрытый слой появляется на клик comcam Элементы интерфейса 15 08.09.2008 11:01