我有一个链接,我需要使用greasemonkey点击
<a href="/attack/index/1016587">Attack This Player</a>
那就是代码
问题是href可以根据页面改变
唯一的静态代码就是“攻击这个玩家
我目前有
function click_element(element)
{
var event = document.createEvent("MouseEvents");
event.initMouseEvent("click", true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
element.dispatchEvent(event);
return;
};
click_element( document.evaluate("//a[I DON'T KNOW WHAT TO PUT HERE]",document,null,9,null).singleNodeValue );
目前适用于带有ids,类e.t.c的链接。 (对不起所有的上限,但只是为了引起对该地区的注意)
感谢您的帮助 我不是那种先进的JavaScript
Reblerebel
答案 0 :(得分:6)
使用jQuery而不是使用XPath - 它会更简单。
如果点击该链接只会将您带到相应的页面,那么整个脚本可以简单如下:
// ==UserScript==
// @name Attack!
// @include http://YOUR_SITE/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// ==/UserScript==
//--- contains is case-sensitive.
var attackLink = $("a:contains('Attack This Player')");
//--- "Click" the link the easy way.
window.location.href = attackLink[0].href;
或者,如果链接操作由页面的JavaScript控制(似乎不太可能基于给定的示例链接):
// ==UserScript==
// @name Attack!
// @include http://YOUR_SITE/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// ==/UserScript==
//--- contains is case-sensitive.
var attackLink = $("a:contains('Attack This Player')");
//--- Click the link if its action was overridden by JavaScript.
var evt = document.createEvent ("HTMLEvents");
evt.initEvent ("click", true, true);
attackLink[0].dispatchEvent (evt);
总是只有一个链接吗?链接总是以“ / attack / index / ”开头吗?
如果是,那么你可以使用:
var attackLink = $("a[href^='/attack/index/']");
如果它更复杂,请打开另一个问题并提供目标页面代码的完整详细信息。链接到页面是最好的。
选择目标页面的元素是一门艺术,并且具有高度特定的页面 jQuery使CSS类型选择更容易;这是a handy jQuery selector reference。