我想浏览器从第三方的网站菜单中预先选择一些选项(我不控制网站)。我的代码(注释掉的部分显示了我还尝试了什么):
// ==UserScript==
// @name Select account
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Select the correct account and other transaction parameters.
// @author Sander Heinsalu
// @match https://somesite.com*
// @icon https://www.google.com/s2/favicons?domain=tampermonkey.net
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant none
// ==/UserScript==
(function() {
'use strict';
//$("#sometext_id").val("12345").change(); // This creates an infinite loop of selecting the correct dropdown element.
var once = true;
if (once){
$("#sometext_id").val("12345").change(); // Still creates an infinite loop of selecting the correct dropdown element.
once = false;
}
//waitForKeyElements (".format-select:has(span[class='select grid5'])", selectFinickyDropdown); // These and below do not do anything on the website.
//waitForKeyElements (".format-select:has(select[id='sometext_id'])", selectFinickyDropdown);
//waitForKeyElements ("select[id=sometext_id]:has(option[selected='selected'])", selectFinickyDropdown);
//waitForKeyElements ("select[id=sometext_id]", selectFinickyDropdown);
/*
//function selectFinickyDropdown (jNode) {
var jNode = document.evaluate("//option[text().includes('sometext')]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
function selectFinickyDropdown () {
//var evt = new Event ("click");
var evt = new Event ("keyup");
jNode[0].dispatchEvent (evt);
jNode.val('12345');
//jNode.text().includes('sometext');
evt = new Event ("change");
jNode[0].dispatchEvent (evt);
}
*/
/*
var toSelect = "//option[text().includes('sometext')]";
var matchingElement = document.evaluate(toSelect, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
//document.getElementById("stateSelect").selectedIndex = i;
//matchingElement.selectedIndex=1;
matchingElement.selected = true;
*/
})();
选择下拉项的其他方法不会在网页上执行任何操作。只有$("#sometext_id").val("12345").change();
选择了该项目,但在每次重复选择后重复该项目并刷新页面。如何选择下拉项并止步于此?没有循环或页面刷新。
页面html的一部分(已编辑的字段名称):
?
<input type="hidden" name="i_csrf_token" value="gibberish" id="i_csrf_token">
<div class="message" id="msg-container" style="display:none">
</div>
<div class="form-container mt20">
<div class="field-row ">
<label for="i_sometext_id" class="req">AText</label>
<span class="select grid5" style="position: relative; width: 275px;">
<select name="sometext_id" id="sometext_id" onchange="DoAutopostback(this);" style="width: 100%; visibility: visible;">
<option value="321">
namex namex ? 54321
</option>
<option value="345" selected="selected">
optionname ? 12345
</option>
</select>
<span class="value" style="width: 344px;">
optionname ? 12345
</span></span>
</div>
<div class="field-row ">
<strong class="label">BText</strong>
<span class="group">
<label class="has-input"><input type="radio" name="i_action_type" id="action_type-1" value="1" class="required" checked="checked">aa</label><br><label class="has-input"><input type="radio" name="i_action_type" id="action_type-2" value="2" class="required">bb</label>
</span>
</div>
<div class="submit-row">
<span class="submit">
<button class="button" type="submit">preview</button>
</span>
</div>
<input type="hidden" name="i_submit" value="1">
?
相关问题about disabling a function after it runs和one()
以及IIFE
不适用,因为是页面的重新加载再次触发了Tampermonkey脚本,而Tampermonkey脚本要么触发了页面的重新加载,要么无法工作。
转载请注明出处:http://www.jxbyjx.net/article/20230515/2593151.html