javascript - 使用 Tampermonkey 通过 javascript 自动填写表单时未发送表单
问题描述
我正在使用以下代码尝试自动填充我在我工作的公司的每日工作时间。
(function() {
'use strict';
//debugger;
var date = document.querySelector("#filter_day").value
var alreadyRun = GM_getValue(date, false);
if (!alreadyRun) {
GM_setValue(date, true);
document.querySelector("#fstjid_1").selectedIndex = 5;
document.querySelector("#time_start_MM_1").setAttribute('value', "00");
document.querySelector("#time_start_HH_1").setAttribute('value', "10");
document.querySelector("#time_end_MM_1").setAttribute('value', "00");
document.querySelector("#time_end_HH_1").setAttribute('value', "19");
document.getElementById("save_btn").click();
}
})();
但是由于某种原因,当使用脚本设置每小时字段并单击保存按钮(脚本是否手动执行)时,不会发送表单,只是刷新页面并清除值。
似乎手动设置每小时字段和脚本设置它之间存在一些不同,但我不能说为什么。
我尝试使用setAttribute
以及简单地使用.value=
. 我尝试使用双括号"
和单个'
. 似乎没有任何工作和分析 HTML 据我所知,这些字段没有什么特别之处。
表格的 HTML:
<table border="0" dir="rtl" width="100%" cellspacing="0" cellpadding="0" style="table-layout:fixed;color:#4e546d ">
<tbody>
<tr iminnertable="true">
<td rowspan="99" style="BORDER-RIGHT: #80a3a8 1pt solid;text-align:center" major="1" dir="ltr" align="center" nowrap=""><input class="input_text_fix" type="text" name="time_start_HH_1" id="time_start_HH_1" value="10" maxlength="2" fieldname="time_start_HH" caption="" style="width:22.0;background-color:#f8f8fb; " onkeypress="return !(window.event && window.event.keyCode == 13);"
onkeyup="if(event.keyCode!=9) if(this.value.length>=2) this.nextSibling.nextSibling.focus()" onchange="flag_touched(this);" tabindex="10">:<input type="text" class="input_text_fix" name="time_start_MM_1" id="time_start_MM_1" value="00" maxlength="2"
fieldname="time_start_MM" caption="" onkeypress="return !(window.event && window.event.keyCode == 13);" style="width:22.0;background-color:#f8f8fb; " onchange="flag_touched(this);" tabindex="10.5">
</td>
<td rowspan="99" style="BORDER-RIGHT: #80a3a8 1pt solid;text-align:center" major="1" dir="ltr" align="center" nowrap=""><input class="input_text_fix" type="text" name="time_end_HH_1" id="time_end_HH_1" value="19" maxlength="2" fieldname="time_end_HH" caption="" style="width:22.0;background-color:#f8f8fb; " onkeypress="return !(window.event && window.event.keyCode == 13);"
onkeyup="if(event.keyCode!=9) if(this.value.length>=2) this.nextSibling.nextSibling.focus()" onchange="flag_touched(this);" tabindex="10">:<input type="text" class="input_text_fix" name="time_end_MM_1" id="time_end_MM_1" value="00" maxlength="2"
fieldname="time_end_MM" caption="" onkeypress="return !(window.event && window.event.keyCode == 13);" style="width:22.0;background-color:#f8f8fb; " onchange="flag_touched(this);" tabindex="10.5">
</td>
<td align="center" rowspan="99" style="BORDER-RIGHT: #80a3a8 1pt solid;text-align:center" major="1" val="9.00">
<input type="text" dir="rtl" name="work_hours_1" value="9.00" class="tableDyn" fieldname="work_hours" style="direction:rtl;width:44;background-color:#f8f8fb;font-size:11px;; border:none;" readonly="" tabindex="10"></td>
<td style="display:none;width:0" rowspan="99" major="1"><input type="hidden" name="units_1" id="units_1" value="" fieldname="units"></td>
</tr>
</tbody>
</table>
保存按钮 ΗΤΜL:
<input class="button_free_width" id="save_btn" type="button" onclick="try{dontPopWarn=1;submit();this.disabled=true;if (save_btn_1) save_btn_1.disabled=true;}catch(e){;}try {document.getElementById("loadingmsg").style.visibility = "visible";document.getElementById("loadingmsg").display = "block";} catch(e) {;}"
value=" שמור " name="right">
解决方案
一件事可能会阻止您的代码工作。
每一个input
都有onchange="flag_touched(this);"
可能导致网页以某种内部 JavaScript 状态存储当前值。这意味着您必须change
在输入上手动调度事件才能模仿用户输入。
尝试使用这样的函数来有效地改变输入的值:
function changeInputValue(element, value) {
if (element instanceof HTMLInputElement) {
element.value = value;
}
else if (element instanceof HTMLSelectElement) {
element.selectedIndex = value;
}
element.dispatchEvent(new Event('change', { bubbles: true }));
}
提交按钮在click
事件中有一些 JavaScript,但它不是,type="submit"
所以它的行为不像原生提交按钮,那么该document.getElementById("save_btn").click();
行应该足以模拟用户与此按钮的交互。
如果这不起作用,您应该addEventListener
在输入和提交按钮上检查潜在的“JavaScript 注册”事件侦听器(带有 ),并将它们添加到问题中。
推荐阅读
- python-3.x - 连接熊猫数据框中的列表并在另一列中获取唯一标记
- azure - 并行运行时打包器“azure-arm”失败
- tensorflow - 将此代码从 tensorflow 1 移植到 tensorflow 2
- amazon-web-services - 凭据和访问密钥之间的区别
- excel - 如何使用 VBA 连接多个列
- datetime - 2018-12-21 10:57 GMT+0 的日期时间格式
- python - 如何不接受大写字母作为输入?同时也让这个人重新输入他们的用户名,直到它全部小写
- google-sheets - 如果时间戳在 24 小时之内,则突出显示重复的名称
- javascript - react js元素类型无效:需要一个字符串(用于内置组件)或一个类/函数(用于复合组件)但得到:未定义
- javascript - “传递给 useEffect 的最后一个参数改变了渲染之间的大小”,但我认为它不会?