如何模拟鼠标点击任何HTML元素(iframe,对象等)从Firefox扩展
How to simulate mouse click over any HTML element (iframe, obbject, etc) from Firefox extension?
在我的扩展中,我得到第一个标签的文档:
var doc = gBrowser.getBrowserForTab(gBrowser.tabs[0]).contentDocument;
文档包含iframe指向外国域,我怎么能模拟点击图像/对象在iframe内?
实际上,我想实现一个iMacros的X/Y点击功能。我该怎么做呢?
要模拟flash对象中的点击,您可能必须使用js-ctypes。
用javascript找到元素,获得元素screenX和screenY,然后添加DOMWindow的screenX和screenY(窗口可能调整为更小的窗口和移动),然后调用点击与js-ctypes。
在windows中是这样做的:
Components.utils.import("resource://gre/modules/ctypes.jsm");
var lib = ctypes.open("user32.dll");
var struct_Point = new ctypes.StructType("Point", [
{"x": ctypes.int},
{"y": ctypes.int}
]);
var GetCursorPos = lib.declare('GetCursorPos',
ctypes.winapi_abi,
ctypes.bool,
struct_Point.ptr
);
/* Use it like this */
var point = new struct_Point;
var ret = GetCursorPos(point.address());
Components.utils.reportError(ret);
Components.utils.reportError(point);
这个页面有如何在mac os和linux中做到这一点:https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Standard_OS_Libraries
/*start setcursorpos*/
var SetCursorPos = lib.declare('SetCursorPos', ctypes.winapi_abi, ctypes.bool, ctypes.int, ctypes.int)
function doSetCursorPos() {
var ret = SetCursorPos(10, 10);
}
/*end setcursorpos*/
/*start mouse_event*/
var mouse_event = lib.declare('mouse_event', ctypes.winapi_abi, ctypes.void_t, ctypes.uint32_t, ctypes.uint32_t, ctypes.uint32_t, ctypes.uint32_t, ctypes.uintptr_t);
var MOUSEEVENTF_LEFTDOWN = 2;
var MOUSEEVENTF_LEFTUP = 4;
function domouse_event() {
var ret = mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
var ret = mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
/*end mouse_event*/
那么这就是如何使用它。我在今年4月1日为stackoverflow制作了这个自动点击器。他们有一个flash游戏,玩家需要在巨石上点击70-120次才能获得独角兽分数。我以为你能解开别人锁定我的话题,但结果是骗局。但我从中得到了一些好东西。
像这样使用:
function clickXTimesWhereCursorIs(X, everyMs) {
var point = new struct_lpPoint;
var ret = GetCursorPos(point.address());
Cu.reportError(ret);
Cu.reportError(point);
var ret = SetCursorPos(point.x, point.y);
for (var i=0; i<X; i++) {
setTimeout(function() {
var ret = mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
var ret = mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}, i*everyMs);
}
}
setTimeout(function() {
clickXTimesWhereCursorIs(90, 100);
}, 3000)
获取所讨论的元素的引用并在其上调用.click()
。
。像这样:
var elem = gBrowser.contentDocument.querySelector("a");
elem.click();
相关文章:
- 动态(重新)创建iframe内容不会重置Chrome中的JS对象
- 将 JSON 对象发布到 iFrame
- 如何使用jquery操作iframe对象
- 重用iframe中的jQuery对象
- 如何从主框架获取对在iframe上创建的对象的引用
- 将 Javascript 对象传递给 HTML iframe(作为对象)
- 在嵌入式站点上使用javascript?(iframe,对象)
- IE9 在 iframe 中打印 PDF 时出现“无效调用对象”
- 从 iframe 访问父级中的 JavaScript 对象
- 访问父 DOM 中的 iframe 窗口对象
- 如何将 Jquery 对象从父 iframe 注入到嵌入式 iframe
- 创建 YT.通过传递 DOM 对象,在 HTML 中来自 iframe 的播放器对象
- 正在检测iframe对象中的src/location更改
- 当从包含IFrame的HTA中引用IFrame对象时返回null
- 如何嵌入translate.google.com没有iframe/对象(x - frame选项是SAMEORIGIN)
- 如何覆盖图像和链接路径在iframe对象
- 如何获得iframe对象的原点
- 如何访问全局iframe对象
- 访问iframe对象.在IE8中的原型
- 设置iframe对象的z轴顺序