1

という単語を含むリンクを開きたいgoogleです。次のようになります。

 <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 経由でウィンドウを開きたい (クリック イベント ?)

使用alert(elm.href);すると「未定義」と表示されます。しかし、 FirePathで試してみると、XPath は機能します。

4

1 に答える 1

1

あなたは XPath が機能すると言いますがelm.href、GM スクリプトでは定義されていません。<input>これは、が AJAX 経由で追加されたことを示唆しています。

スクリプトでは、AJAX 対応の手法を使用する必要があります。何かのようなもの:

// ==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);
}
于 2013-09-24T15:04:57.410 に答える