HtmlUnit设置Span文本无效,如何在Schoology中禁用作业提交?
解决Schoology作业提交设置模拟修改问题
问题根源
你遇到的核心问题是:仅修改DOM元素的class和文本内容,并没有触发表单提交所需的实际参数变更。这类开关按钮的状态切换通常由JavaScript处理,会同步更新表单内的隐藏输入字段,而服务器是根据这些字段的值来保存设置的,不是前端的显示DOM。另外你关闭了JavaScript,导致按钮点击的交互逻辑无法执行,这也是初始点击无效的原因。
解决方案
1. 启用JavaScript并正确模拟点击
Schoology严重依赖JavaScript处理交互,必须开启JS才能让按钮点击的逻辑正常执行,包括更新表单状态:
WebClient webClient = new WebClient(); // 开启JavaScript,这是关键 webClient.getOptions().setJavaScriptEnabled(true); // 忽略脚本错误,避免页面中断 webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.setCssErrorHandler(new SilentCssErrorHandler()); HtmlPage currPage = webClient.getPage("https://app.schoology.com/course/*************/materials/assignments/add?f=********"); // 等待页面JS加载完成 webClient.waitForBackgroundJavaScript(5000); // 通过key属性定位按钮(比XPath更稳定) HtmlSpan submissionToggle = currPage.getFirstByXPath("//span[@key='dropbox']"); if (submissionToggle != null) { // 模拟点击 currPage = submissionToggle.click(); // 等待JS处理状态变更 webClient.waitForBackgroundJavaScript(3000); } // 提交表单 HtmlElement submitBtn = currPage.getElementById("edit-submit"); currPage = submitBtn.click(); webClient.waitForBackgroundJavaScript(5000);
2. 直接修改对应表单字段(更可靠)
如果模拟点击仍有问题,可以直接找到按钮对应的隐藏输入字段,手动设置值:
- 在浏览器开发者工具中,查看该开关按钮关联的隐藏输入框(通常
name属性和dropbox相关,比如dropbox_enabled)。 - 找到字段后,在代码中直接设置其值:
// 假设隐藏输入框的name是"dropbox_enabled",0=禁用提交,1=启用 HtmlInput dropboxInput = currPage.getFirstByXPath("//input[@name='dropbox_enabled']"); if (dropboxInput != null) { dropboxInput.setValueAttribute("0"); } // 提交表单 HtmlElement submitBtn = currPage.getElementById("edit-submit"); currPage = submitBtn.click();
关键说明
- 前端DOM的显示状态只是表象,服务器真正读取的是表单控件的
value属性,所以必须确保对应字段的值被正确修改。 - 开启JavaScript并等待其执行完成,是模拟这类动态交互页面的必要步骤。
内容的提问来源于stack exchange,提问作者scott
相关产品推荐
相关产品推荐

