admin管理员组

文章数量:1399949

Some sites (namely Steam Community Market) require the user to manually check a specific checkbox for repetitive actions like buying items.

I'd like to have that checkbox always checked.

  • URL:
    (Field-Tested)
  • element:
    <input id="market_buynow_dialog_accept_ssa" type="checkbox" value="0" name="accept_ssa">

Can that be done with Tampermonkey?

I found document.getElementById("checkbox").checked = true; which seems logical to me. I put it in a new Tampermonkey script and added steam market to the list of websites the script activates on but it didn't work.

Some sites (namely Steam Community Market) require the user to manually check a specific checkbox for repetitive actions like buying items.

I'd like to have that checkbox always checked.

  • URL:
    http://steammunity./market/listings/730/USP-S%20%7C%20Torque%20(Field-Tested)
  • element:
    <input id="market_buynow_dialog_accept_ssa" type="checkbox" value="0" name="accept_ssa">

Can that be done with Tampermonkey?

I found document.getElementById("checkbox").checked = true; which seems logical to me. I put it in a new Tampermonkey script and added steam market to the list of websites the script activates on but it didn't work.

Share Improve this question edited Nov 17, 2015 at 22:40 Brock Adams 93.7k23 gold badges241 silver badges305 bronze badges asked Nov 17, 2015 at 18:38 SchmixSchmix 571 gold badge2 silver badges7 bronze badges 3
  • This is possible and it's not too difficult but you'll have to provide some specifics like the page url and the actual checkbox html (and a link to the entire page html posted on pastie or similar). If you provide these details your question, although borderline offtopic, may still be useful for other people. – woxxom Commented Nov 17, 2015 at 19:36
  • @wOxxOm Well I was going to use it for the general steam market (at link) but to be specific i was trying on link. HTML code (just source code) at link. Though it may be useful to know that the box only appears once you click "buy now", and also the listings change a lot. I hope this is what is needed – Schmix Commented Nov 17, 2015 at 20:31
  • See, also: Choosing and activating the right controls on an AJAX-driven site. – Brock Adams Commented Nov 17, 2015 at 22:40
Add a ment  | 

2 Answers 2

Reset to default 5
  1. Find a pattern in the urls where the userscript should be executed, for example if it's http://steammunity./market/listings/730/USP-S%20%7C%20Torque%20(Field-Tested) then we can assume the part starting with 730 is volatile so we'll replace it with * in @include key.
  2. We should wait for the checkbox element to be added on the page, there are two methods: MutationObserver-based (I'll use setMutationHandler wrapper) and setInterval-based (best known wrapper is waitForKeyElements). Both are plugged in via @require key.

// ==UserScript==
// @name        Steam - accept the agreement
// @include     http://steammunity./market/listings/*
// @require     https://greasyfork/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 });
}

More info: Greasespot wiki.

Bit late, but your code is wrong.

The grtelementbyid should refer to the html tag's id, not type. I.e. getelementbyid("market_buynow_....")

本文标签: javascriptAutomatically check a checkbox with a userscriptStack Overflow