Автоматически установить флажок с помощью usercript?
Некоторые сайты (а именно Steam Community Market) требуют, чтобы пользователь вручную установил соответствующий флажок для повторяющихся действий, таких как покупка предметов.
Я хотел бы, чтобы этот флажок всегда отмечался.
- URL:
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 Market в список сайтов, на которых активирован скрипт, но он не работал.
1 ответ
Решение
- Найдите шаблон в URL, где должен быть выполнен скрипт пользователя, например, если он
http://steamcommunity.com/market/listings/730/USP-S%20%7C%20Torque%20(Field-Tested)
тогда мы можем принять часть, начинающуюся с730
является летучим, поэтому мы заменим его*
в@include
ключ. - Мы должны подождать, пока элемент checkbox будет добавлен на странице, есть два метода: MutationObserver-based (я буду использовать оболочку setMutationHandler) и
setInterval
на основе (самая известная оболочка это waitForKeyElements). Оба подключены через@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.
Немного поздно, но ваш код неверен.
Grtelementbyid должен относиться к идентификатору тега html, а не к типу. Т.е. getelementbyid("market_buynow_....")