如何通过非自有Google Form的viewform链接用代码获取编辑URL
问题原因
- Google Form的编辑URL仅对表单所有者、被授予编辑权限的协作者开放,你没有该表单的编辑权限,调用
FormApp.openByUrl()或者FormApp.openById()接口必然会触发权限报错,这是Google官方的权限限制,没有绕过方法。 - 你的核心需求是定期提交表单响应,完全不需要获取编辑URL,直接解析公开表单的提交参数构造POST请求即可实现自动提交,这是当前场景下的最优实现方案。
自动提交实现步骤
- 提取表单公开ID:你给出的提交链接中
1FAIpQLSeZfR4Di9yfTDc5yXc7WYmLy-MjwVf_XLC7_ZeQ7367Yh2DpQ就是该表单的公开ID,对应的提交接口地址为原viewform后缀替换为formResponse的地址。 - 抓包获取表单项参数:打开公开表单页面,按F12打开浏览器开发者工具,切换到「网络」面板,手动提交一次测试响应,过滤找到请求路径包含
formResponse的POST请求,查看该请求的表单数据,提取每个表单项对应的entry.xxxx格式参数,这些就是每个字段的提交键名。 - 构造自动提交代码:根据提取的参数写代码构造POST请求,配置定时触发即可完成定期提交的需求,不需要调用需要权限的FormApp接口。
以下是Google Apps Script的示例代码:
function autoSubmitForm() { // 替换为对应表单的提交地址 const submitUrl = "https://docs.google.com/forms/d/e/1FAIpQLSeZfR4Di9yfTDc5yXc7WYmLy-MjwVf_XLC7_ZeQ7367Yh2DpQ/formResponse"; // 替换为你实际抓包获取的表单项参数和要提交的对应值 const formData = { "entry.123456789": "要提交的内容1", "entry.987654321": "要提交的内容2" }; const options = { method: "post", payload: formData, followRedirects: true }; UrlFetchApp.fetch(submitUrl, options); console.log("表单提交成功"); }
需要定期执行的话,直接在Apps Script后台添加时间触发器,选择你需要的执行频率即可。
内容的提问来源于stack exchange,提问作者java_hacker
相关产品推荐
相关产品推荐

