首页 > 解决方案 > 无法提交 Google 表单字段,输入已填写

问题描述

我正在尝试创建一个自动为我完成谷歌表单的调度程序。有问题的谷歌表格是:https ://docs.google.com/forms/d/e/1FAIpQLSfKdW2XyNNvbMkdQUGkZf8A6Bu_5SI_A5GuXbJPC2p23WidiA/viewform

我从https://github.com/jdowning100/Form-Autocomplete修改了这段代码

我的代码在这里,我正在使用 TamperMonkey:

// ==UserScript==
// @name         SchoolAttendanceFiller
// @namespace    http://www.github.com/jdowning100/Form-Autocomplete
// @version      0.2
// @description  Prototype form autocompletion
// @author       staticcg
// @match        http://*/*
// @include      https://docs.google.com/forms/d/e/1FAIpQLSfKdW2XyNNvbMkdQUGkZf8A6Bu_5SI_A5GuXbJPC2p23WidiA/*
// @grant        none
// ==/UserScript==

(function() {

    'use strict';

    window.onerror = function ignore(){return true;};

    var SchoolInfo = {
        FirstName : "Imaginary",
        LastName : "Person",
        SchoolID : "ID "
    };
    //updated to fix hasValue patch.
    var valueControllers = document.getElementsByClassName("quantumWizTextinputPaperinputEl");
    // ^ fixes required question glitch
    var fields = document.getElementsByClassName("quantumWizTextinputPaperinputInput exportInput");
    var titles = document.getElementsByClassName("freebirdFormviewerComponentsQuestionBaseTitle exportItemTitle freebirdCustomFont");
    for(var i = 0; i < fields.length; i++){
        if(titles[i].innerText.valueOf() == "STUDENT FIRST NAME *".valueOf() || titles[i].innerText.valueOf() == "STUDENT FIRST NAME *".valueOf()){
            fields[i].value = SchoolInfo.FirstName;
            fields[i].setAttribute("data-initial-value", SchoolInfo.FirstName);
            fields[i].setAttribute("badinput", false);
        }
        if(titles[i].innerText.valueOf() == "STUDENT LAST NAME *".valueOf() || titles[i].innerText.valueOf() == "STUDENT LAST NAME *".valueOf()){
            fields[i].value = SchoolInfo.LastName;
            fields[i].setAttribute("data-initial-value", SchoolInfo.LastName);
            fields[i].setAttribute("badinput", false);
        }
        if(titles[i].innerText.valueOf() == "STUDENT LOCAL ID NUMBER [MOST BEGIN WITH LETTER L and is listed on your id card below your name] *".valueOf() || titles[i].innerText.valueOf() == "STUDENT LOCAL ID NUMBER [MOST BEGIN WITH LETTER L and is listed on your id card below your name] *".valueOf()){
            fields[i].value = SchoolInfo.SchoolID;
            fields[i].setAttribute("data-initial-value", SchoolInfo.SchoolID);
            fields[i].setAttribute("badinput", false);
        }
        for(var j = 0; j < valueControllers.length; j++){
            var fix = document.createAttribute("class");
            fix.value = "quantumWizTextinputPaperinputEl freebirdFormviewerComponentsQuestionTextShort freebirdFormviewerComponentsQuestionTextTextInput freebirdThemedInput modeLight hasValue";
            valueControllers[j].setAttributeNode(fix);
        }
    }

    try{
       document.getElementsByClassName("appsMaterialWizButtonPaperbuttonLabel")[1].click();
    }catch(error){
        console.log(error);
        document.forms[0].submit();
    }


    document.getElementsByClassName("quantumWizButtonPaperbuttonFocusOverlay exportOverlay")[2].click();

    document.forms[0].submit();
})();

问题是 Google 表单说我的回复条目是必填问题,就像它是空的一样。我也无法在启用脚本的情况下编辑文本框。

我一直用来调试的表单的 HTML 代码:

<div jscontroller="sWGJ4b" jsaction="EEvAHc:yfX9oc;" class="freebirdFormviewerComponentsQuestionBaseRoot hasError">
   <div class="freebirdFormviewerComponentsQuestionBaseHeader">
      <div class="freebirdFormviewerComponentsQuestionBaseTitleDescContainer">
         <div id="i1" class="freebirdFormviewerComponentsQuestionBaseTitle exportItemTitle freebirdCustomFont" role="heading" aria-level="3" aria-describedby="i4">STUDENT FIRST NAME<span class="freebirdFormviewerComponentsQuestionBaseRequiredAsterisk" id="i4" aria-label="Required question"> *</span></div>
         <div class="freebirdFormviewerComponentsQuestionBaseDescription" id="i2"></div>
      </div>
   </div>
   <div jscontroller="oCiKKc" jsaction="rcuQ6b:vZc4S;O22p3e:zjh6rb;b2trFe:eVidQc;sPvj8e:d3sQLd;AHmuwe:h06R8;" class="freebirdFormviewerComponentsQuestionTextRoot">
      <div class="quantumWizTextinputPaperinputEl freebirdFormviewerComponentsQuestionTextShort freebirdFormviewerComponentsQuestionTextTextInput freebirdThemedInput modeLight hasValue" jscontroller="pxq3x" jsaction="clickonly:KjsqPd; focus:Jt1EX; blur:fpfTEe; input:Lg5SV" jsshadow="" jsname="YPqjbf" aria-disabled="true">
         <div class="quantumWizTextinputPaperinputMainContent exportContent">
            <div class="quantumWizTextinputPaperinputContentArea exportContentArea">
               <div class="quantumWizTextinputPaperinputInputArea">
                  <input type="text" class="quantumWizTextinputPaperinputInput exportInput" jsname="YPqjbf" autocomplete="off" tabindex="0" aria-labelledby="i1" aria-describedby="i2 i3" disabled="" required="" dir="auto" data-initial-dir="auto" data-initial-value="Cory " badinput="false">
                  <div jsname="LwH6nd" class="quantumWizTextinputPaperinputPlaceholder exportLabel" aria-hidden="true">Your answer</div>
               </div>
               <div class="quantumWizTextinputPaperinputUnderline exportUnderline"></div>
               <div jsname="XmnwAc" class="quantumWizTextinputPaperinputFocusUnderline exportFocusUnderline" style="transform-origin: 133px center;"></div>
            </div>
         </div>
         <div class="quantumWizTextinputPaperinputCounterErrorHolder">
            <div jsname="ty6ygf" class="quantumWizTextinputPaperinputHint exportHint"></div>
         </div>
      </div>
   </div>
   <div jsname="Rfh2Tc" class="freebirdFormviewerComponentsQuestionBaseValidationError" id="i3" role="alert">
      <div class="freebirdFormviewerComponentsQuestionBaseErrorIcon">
         <div class="freebirdMaterialIconIconEl freebirdMaterialIconIconUpdatedM2">
            <div aria-hidden="true" class="freebirdMaterialIconIconImage freebirdMaterialIconIconDarkIcon freebird-qp-icon-error-outline-b">&nbsp;</div>
            <div aria-hidden="true" class="freebirdMaterialIconIconImage freebirdMaterialIconIconLightIcon freebird-qp-icon-error-outline-w">&nbsp;</div>
            <div aria-hidden="true" class="freebirdMaterialIconIconImage freebirdMaterialIconIconM2Icon freebird-qp-icon-error-outline-red">&nbsp;</div>
         </div>
      </div>
      This is a required question
   </div>
</div>

我所做的是添加一个属性,谷歌添加到已完成的文本框值中,称为“hasValue”,起初看起来它会起作用,因为它解决了文本显示在占位符文本之上的问题。但是一旦提交它仍然表现得好像文本框中没有值。我想要完成的是允许它使用自动填充的文本提交。

这显示了给出的响应

标签: javascripthtmljsongoogle-chrometampermonkey

解决方案


推荐阅读