Нажав на ссылку с greasemonkey из содержимого внутри ссылки - PullRequest
2 голосов
/ 17 июня 2011

У меня есть ссылка, по которой мне нужно щелкнуть, используя 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 );

в настоящее время это работает для ссылок с идентификаторами, классами и т. Д. (Извините за все заглавные буквы, но это просто для того, чтобы привлечь внимание к области)

спасибо за любую помощь, которую яЯ не настолько продвинут в JavaScript

Reblerebel

1 Ответ

6 голосов
/ 17 июня 2011

Вместо того, чтобы использовать XPath, используйте jQuery - это будет проще.

Если щелкнув по этой ссылке, вы попадете на соответствующую страницу, тогда весь сценарий может быть таким простым:

// ==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-типа;Вот удобный справочник по селектору jQuery .

...