簡體   English   中英

使用 Tampermonkey 通過 javascript 自動填寫表格時未發送表格

[英]Form not sent when auto filling form via javascript using Tampermonkey

我正在使用以下代碼嘗試自動填充我在我工作的公司的每日工作時間。

(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);" 這可能會導致 web 頁面將當前值存儲在某些內部 JavaScript state 中。 這意味着您必須在輸入上手動調度change事件才能模仿用戶輸入。

嘗試使用這樣的 function 來有效地更改輸入的值:

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 ),並將它們添加到問題中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM