我想模拟点击学习管理系统Schoology中的一个按钮,以更改我使用Java和HtmlUnit创建的作业的设置。当我获得元素并点击它时,它的状态没有改变(不知道为什么)。因此,我尝试根据单击/取消单击按钮时的值手动设置值。
未单击:
<span tabindex="0" role="button" key="dropbox" class="adv-option-btn adv-option-toggle toggle-dropbox adv-option-on sCourseMaterialsLock-processed" on-title="Submissions Enabled" off-title="Submissions Disabled" original-title=""><span class="visually-hidden">Submissions Enabled</span></span>
点击:
<span tabindex="0" role="button" key="dropbox" class="adv-option-btn adv-option-toggle toggle-dropbox sCourseMaterialsLock-processed" on-title="Submissions Enabled" off-title="Submissions Disabled" original-title=""><span class="visually-hidden">Submissions Disabled</span></span>
这是我的代码:
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(false);
webClient.setCssErrorHandler(new SilentCssErrorHandler());
HtmlPage currPage=webClient.getPage("https://app.schoology.com/course/*************/materials/assignments/add?f=********");
List<Object> submissionDisabler=(List<Object>) currPage.getByXPath("//*[@id=\"s-grade-item-add-form\"]/div/div[15]/div[2]/span[1]");
assert submissionDisabler.size()==1;
DomElement dom = (DomElement) submissionDisabler.get(0);
dom.setAttribute("class", "adv-option-btn adv-option-toggle toggle-dropbox sCourseMaterialsLock-processed");
dom.setTextContent("Submissions Disabled"); (also tried without this...)
DomElement submitBtn = currPage.getElementById("edit-submit"); //Find element called Submit to submit form.
currPage = submitBtn.click(); //Click on the button.
这将成功创建作业,但当我手动进入"学校"并查看作业时,我想单击的按钮(禁止提交作业)未被单击。有什么想法可以实现这一点吗?
谢谢大家!
2条答案
按热度按时间zc0qhyus1#
一个可能的问题是,设置button元素的class属性和textContent可能不足以改变其状态,这是因为button的状态可能由网站的JavaScript代码控制,而HtmlUnit无法执行。
要验证这一点,您可以尝试检查网站的HTML和JavaScript代码,以了解按钮的状态是如何被控制的。这可能涉及查找附加到按钮元素的事件处理程序,或者查找JavaScript代码中存储按钮状态的变量。
一个可能的解决方案是尝试模拟网站的JavaScript代码用来改变按钮状态的事件或动作。例如,可以尝试使用HtmlUnit触发鼠标单击按钮元素,或者可以尝试调用直接处理按钮状态更改的JavaScript函数。
同样值得注意的是,使用HtmlUnit这样的工具与网站进行交互可能会很脆弱,因为网站的代码可能会随时更改,并破坏你的代码。可能值得考虑使用像Selenium这样的更强大的工具,它为与网站进行交互提供了更高级别的界面,旨在处理现代Web开发的复杂性。
oogrdqng2#
我不太清楚你说的“未点击”是什么意思,但我认为这是一个一般性的提示
可能是问题所在。可能部分按钮处理是在客户端用java脚本完成的-这需要启用js支持。HtmlUnit在执行所有页面js方面并不那么糟糕。
如果这没有帮助,请打开github(https://github.com/HtmlUnit/htmlunit/issues)上的一个问题,我会尝试更详细地分析这个问题。