【问题标题】:Automatically check a checkbox with a userscript?使用用户脚本自动检查复选框?
【发布时间】:2015-11-17 18:38:37
【问题描述】:

某些网站(即 Steam 社区市场)要求用户手动选中特定复选框以执行重复操作,例如购买物品。

我希望始终选中该复选框。

  • 网址:
    http://steamcommunity.com/market/listings/730/USP-S%20%7C%20Torque%20(Field-Tested)
  • 元素:
    <input id="market_buynow_dialog_accept_ssa" type="checkbox" value="0" name="accept_ssa">

用 Tampermonkey 可以做到吗?

我找到了document.getElementById("checkbox").checked = true;,这对我来说似乎是合乎逻辑的。我把它放在一个新的 Tampermonkey 脚本中,并将 Steam 市场添加到脚本激活的网站列表中,但它不起作用。

【问题讨论】:

  • 这是可能的,而且不是太难,但是您必须提供一些细节,例如页面 url 和 actual 复选框 html(以及整个页面 html 的链接张贴在 paste.org 或类似网站上)。如果您提供这些详细信息,您的问题虽然是离题的边缘,但对其他人可能仍然有用。
  • @wOxxOm 好吧,我打算将它用于一般的蒸汽市场(link),但具体来说,我正在尝试linklink 的 HTML 代码(只是源代码)。尽管知道该框仅在您单击“立即购买”后才会出现可能很有用,而且列表也发生了很大变化。我希望这是我们所需要的

标签: javascript checkbox greasemonkey steam tampermonkey


【解决方案1】:
  1. 在应该执行用户脚本的 url 中找到一个模式,例如,如果它是 http://steamcommunity.com/market/listings/730/USP-S%20%7C%20Torque%20(Field-Tested),那么我们可以假设以 730 开头的部分是易失性的,所以我们将在 @include 中将其替换为 *键。
  2. 我们应该等待页面上添加复选框元素,有两种方法:MutationObserver-based(我将使用setMutationHandler wrapper)和setInterval-based(最著名的wrapper 是@987654323 @)。两者都通过@require 键插入。

// ==UserScript==
// @name        Steam - accept the agreement
// @include     http://steamcommunity.com/market/listings/*
// @require     https://greasyfork.org/scripts/12228/code/setMutationHandler.js
// ==/UserScript==


// maybe the elements are already on the page
checkThem([].slice.call(document.querySelectorAll('input[type="checkbox"]')));

// but anyway set a MutationObserver handler for them
setMutationHandler(document, 'input[type="checkbox"]', checkThem);

function checkThem(nodes) {
    nodes.forEach(function(n) { n.checked = true });
}

更多信息:Greasespot wiki

【讨论】:

  • 谢谢!虽然我不再有足够的钱买任何东西,当我现在点击购买时,它只会出现“添加更多资金”,所以我无法真正测试它,但至少 Tamper Monkey 显示脚本已执行。在我们这样做的同时,是否也可以让“立即购买”按钮立即购买物品? (或自动选中该框并自动单击确认按钮?)另外,功能(checkThem)是否必须在第一次使用之前而不是之后声明?只是想知道
  • 是的,这是可能的,但既然这是另一个问题,我建议你自己去看看。
【解决方案2】:

有点晚了,但是你的代码是错误的。

grtelementbyid 应该引用 html 标签的 id,而不是类型。 IE。 getelementbyid("market_buynow_....")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多