2013-09-24 3 views
1

Я хотел бы открыть ссылку, которая содержит слово google. Это выглядит следующим образом:XPath не работает, чтобы нажать кнопку из сценария Greasemonkey

<input class="submit" style="background: #409999; border-radius: 10px;" value="open" onclick="Open('143615', '1', 'https://www.google.de/');" type="submit"> 


Я попробовал этот Greasemonkey код:

var snapResults = document.evaluate("//input[contains(@onclick, 'test')]",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 

for (var i = snapResults.snapshotLength - 1; i >= 0; i--) { 
    var elm = snapResults.snapshotItem(i); 
    // do stuff with elm 

    if (elm) //open the window, which contains "test" 
    { 
     elm.singleNodeValue.click(); //there is no effect ... 
     alert(i+". element opend"); 
    }   
    else 
    { 
     alert(i+". Not found."); 
    } 
} 

Это не имеет никакого эффекта. Я хотел бы открыть окно через Greasemonkey (событие click?)

Когда я использую alert(elm.href);, он говорит, что он «неопределен». Но XPath работает, когда я пробую его в FirePath.

ответ

1

Вы говорите, что XPath работает, но elm.href не определен в сценарии GM. Это говорит о том, что <input> добавляется через AJAX.

Ваш сценарий должен использовать AJAX-aware techniques. Что-то вроде:

// ==UserScript== 
// @name  _Clicking "Open" buttons 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 
waitForKeyElements ("input.submit[onclick*='open']", clickOpenBtn); 

function clickOpenBtn (jNode) { 
    triggerMouseEvent (jNode[0], "click"); 
} 

function triggerMouseEvent (node, eventType) { 
    var clickEvent = document.createEvent ('MouseEvents'); 
    clickEvent.initEvent (eventType, true, true); 
    node.dispatchEvent (clickEvent); 
} 
Смежные вопросы