HtmlUnit-Android包中JavaScriptExecutor无executeScript方法的解决求助
解决HtmlUnit3-Android中无法调用executeScript的问题
问题根源
你导入的org.htmlunit.javascript.background.JavaScriptExecutor是HtmlUnit中用于后台JavaScript任务管理的类,根本不是用来执行自定义脚本的,所以找不到executeScript方法是必然的。
可行解决方案
方案1:直接调用按钮的原生click方法(推荐)
HtmlUnit的HtmlButton本身就提供了click()方法,完全不需要通过JavaScript执行,代码更简洁可靠:
import org.htmlunit.WebClient import org.htmlunit.html.HtmlButton import org.htmlunit.html.HtmlPage private lateinit var mainScreen : HtmlPage val webClient = WebClient() val mainPage = webClient.getPage(anyURL) as HtmlPage val buttonsList = mainPage.getElementsByTagName("button") as List<HtmlButton> for (targetButton in buttonsList) { if (targetButton.textContent == "Continue") { targetButton.click() // 直接调用原生click方法 } }
方案2:使用HtmlPage或WebClient执行JavaScript脚本
如果确实需要通过JS触发操作,HtmlUnit3中正确的方式是用HtmlPage的executeJavaScript方法,或者WebClient的相关方法,不需要转换到错误的JavaScriptExecutor类:
// 用HtmlPage执行脚本 for (targetButton in buttonsList) { if (targetButton.textContent == "Continue") { mainPage.executeJavaScript("arguments[0].click();", targetButton) } } // 或者用WebClient执行(需要指定页面窗口) val window = mainPage.enclosingWindow webClient.executeJavaScript("arguments[0].click();", window, targetButton)
方案3:确认HtmlUnit3-Android的API兼容性
HtmlUnit3-Android是专门适配Android的版本,部分API可能和标准HtmlUnit有差异,确保你使用的方法在Android版本中存在:
- 避免使用仅桌面版支持的类/方法
- 查阅依赖包自带的API文档确认可用方法
内容的提问来源于stack exchange,提问作者Richard Hammond
相关产品推荐
相关产品推荐

