javascript - 无法提交 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"> </div>
<div aria-hidden="true" class="freebirdMaterialIconIconImage freebirdMaterialIconIconLightIcon freebird-qp-icon-error-outline-w"> </div>
<div aria-hidden="true" class="freebirdMaterialIconIconImage freebirdMaterialIconIconM2Icon freebird-qp-icon-error-outline-red"> </div>
</div>
</div>
This is a required question
</div>
</div>
我所做的是添加一个属性,谷歌添加到已完成的文本框值中,称为“hasValue”,起初看起来它会起作用,因为它解决了文本显示在占位符文本之上的问题。但是一旦提交它仍然表现得好像文本框中没有值。我想要完成的是允许它使用自动填充的文本提交。
解决方案
推荐阅读
- r - 将索引数据框应用于动物园对象
- css - 如何使用反应引导程序连续设置卡片
- javascript - 使用 CSS 引用 Web 组件根属性
- c++ - 单击系统托盘通知时启动 UI 或应用程序
- javascript - 如何将翻译后的属性文件保存为从右到左?
- java - Quarkus 使用 OffsetDateTime 保存实体,没有偏移量/时区
- symfony - 在 Symfony 5.1 中使用默认参数在路由中保留斜杠
- python - 如何用正则表达式替换找到的数据?
- typescript - 是否可以强制类型转换?
- javascript - 显示一个 i 框架,使用 vanilla JavaScript 隐藏另一个