Эмулировать клик мышью
Доброго времени суток! Передо мной встала не совсем простая задача.
Пишу скрипт под грейсманки для автоматического сбора подарков с одного сайта. Речь о сервисе 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) |
FF вроде позволяет сделать .click()
и не стоит испытвать сразу ВСЕ способы в одном try-catch первый же не сработанный НЕ позволит выполнится всем остальным |
Цитата:
Цитата:
Вопрос остается открытым. |
значит не пытайтесь эмулировать клик.
делайте сразу то, что должно происходить во время клика |
попробовал разобраться в скрипте
http://pastebin.com/2nzdgT0a не понимаю, почему классы именуются буквами a,b,c,d,ect. ? |
Я видел пару таких скриптов, но они были в одну строчку записаны. Возможно это результат компрессии.
|
да, именно так скрипт
Цитата:
Кстати, greasemonkey позволяет видеть глобальные переменные? если на сайте присутствует jquery, а из моего скрипта (следуя) вызов alert(typeof window.$) // undefined :( |
И еще, возможно ли подключить внешний скрипт из 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>'); })(); |
дабы не плодить новых тем задам вопрос здесь
Что значат следующие строки? Function.prototype.bind = function (a) { var b = this; return function () { return b.apply(a, arguments); } }; |
Эта функция делает так, что все последующие вызовы будут относиться к другому контексту:
<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> |
Часовой пояс GMT +3, время: 15:40. |