使用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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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(&quot;loadingmsg&quot;).style.visibility = &quot;visible&quot;;document.getElementById(&quot;loadingmsg&quot;).display = &quot;block&quot;;} 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();行应该足以模拟用户与该按钮的交互。

如果这不起作用,你应该检查潜在的";JavaScript注册";事件监听器(带有addEventListener(,并将它们添加到问题中。

最新更新