【问题标题】:Click many links, in one page, with a Greasemonkey script?使用 Greasemonkey 脚本在一个页面中单击多个链接?
【发布时间】:2013-06-01 07:28:44
【问题描述】:

我是 3 个网站的管理员,我的工作是删除不需要的项目,通常单击标有“删除”的每个项目。我想自动化这个过程。尝试使用一些自动化程序(宏记录器),但它们是静态的。

我不是 Greasemonkey 编码器,如果有人能告诉我从哪里开始,我将不胜感激,

网址格式:

<a class="delete" href="http://www.domain.com/#!/item/delete/{id}">Delete</a>

只要有class="delete",我想点击删除链接。

每个页面包含 20 个链接。

当点击删除链接时,页面不刷新,jQuery。

【问题讨论】:

标签: javascript hyperlink greasemonkey


【解决方案1】:
var all = document.getElementsByClassName("delete");
for(var i=0; i<all.length; i++) {
    var deleteUrl = all[i].href;
    var ifr = document.createElement("IFRAME");
    document.body.appendChild(ifr);
    ifr.src = deleteUrl;
}

您可以在浏览器的 JavaScript 控制台中运行类似上述的简单脚本,或将其设为书签。

【讨论】:

  • +1 表示 iframe 的想法。虽然代码有点脆弱/危险。它至少应该检查该节点是一个链接。也许使用document.querySelectorAll()
【解决方案2】:

另请参阅"How to make Greasemonkey click lots of links one by one?"

由于每个“删除”按钮都会打开一个新页面,因此直接单击即可从当前页面导航。因此,请改为打开 &lt;iframe&gt;s 中的链接。

使用 jQuery 让这一切变得更简单、更健壮。以下是完整的脚本...

对于简单的静态页面:

// ==UserScript==
// @name     _Fire lots of delete buttons
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==

var deleteLinks = $("a.delete");

deleteLinks.each ( function () {
    if (this.href) {
        $("body").append (
            '<iframe class="gmDelIfr" src="' + this.href + '"></iframe>'
        );
    }
} );

//-- Use whatever CSS you desire. Like `display: none;`, for example.
GM_addStyle ( "                                 \
    iframe.gmDelIfr {                           \
        width:                  80%;            \
        height:                 2em;            \
        margin:                 0;              \
        padding:                0;              \
    }                                           \
" );


对于 AJAX 驱动的页面:(也适用于静态页面)

// ==UserScript==
// @name     _Fire lots of delete 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==

waitForKeyElements ("a.delete", clickDeleteLink);

function clickDeleteLink (jNode) {
    var thisHref    = jNode[0].href;
    if (thisHref) {
        $("body").append (
            '<iframe class="gmDelIfr" src="' + thisHref + '"></iframe>'
        );
    }
}

//-- Use whatever CSS you desire. Like `display: none;`, for example.
GM_addStyle ( "                                 \
    iframe.gmDelIfr {                           \
        width:                  80%;            \
        height:                 2em;            \
        margin:                 0;              \
        padding:                0;              \
    }                                           \
" );

【讨论】:

  • 谢谢,它似乎不起作用,我已经更新了我的问题(URL 模式),因为每个 URL 都以唯一的 ID 结尾,单击时页面不会刷新(使用提交的操作阿贾克斯)。我很乐意向您展示它自己的页面,但它位于受保护的管理区域内,不能公开查看。 Greasemonkey 似乎是一个好主意,但如果您能想到另一种方法,将不胜感激。
  • 预先说明 AJAX 行为之类的事情,它使世界变得与众不同。现在,一个非常重要的问题。当您单击一个链接时,页面如何变化?在 HTML sn-ps 之前和之后发布。 (如果可能,在 HTML 期间)。这是因为您可能需要限制点击次数。
  • 点击删除标签后,帖子从数据库中删除,标签更改为已删除,无需刷新页面。手动页面刷新后,该项目将从页面中消失。
  • “标签”是什么意思?不是&lt;label&gt; 元素?你是说链接的文字吗?编辑您的问题以显示 HTML sn-ps 之前和之后的内容。此外,页面加载时是否存在所有“删除”链接(关闭 javascript),还是它们也是由 javascript 添加的?
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2013-01-21
  • 2016-11-28
  • 1970-01-01
  • 2015-01-28
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多