• 主页
  • 选择下拉项并使用Tampermonkey创建无限循环

选择下拉项并使用Tampermonkey创建无限循环

我想浏览器从第三方的网站菜单中预先选择一些选项(我不控制网站)。我的代码(注释掉的部分显示了我还尝试了什么):

    // ==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