You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 直接修改对应表单字段(更可靠)

如果模拟点击仍有问题,可以直接找到按钮对应的隐藏输入字段,手动设置值:

  1. 在浏览器开发者工具中,查看该开关按钮关联的隐藏输入框(通常name属性和dropbox相关,比如dropbox_enabled)。
  2. 找到字段后,在代码中直接设置其值:
// 假设隐藏输入框的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:31:12