html按钮调用go函数,如何点击htmlunit中的javascript按钮

在使用HTMLUnit加载项在火狐浏览器中生成类时,遇到问题:无法生成点击特定搜索按钮的代码。按钮点击后应显示结果,但代码仅填充表单并返回上一页。尝试通过执行JavaScript模拟点击,却引发TypeError,似乎与网站上的其他脚本有关。已找到可能的按钮ID,但点击仍无效。考虑可能需要等待页面和JavaScript完全加载,或者调整Ajax控制器设置来处理异步内容。
摘要由CSDN通过智能技术生成

width="100%">

Advanced options

该按钮是站点左侧的搜索按钮。我在火狐上使用了htmlunitscripter加载项来生成一个类,但是即使它生成的代码将填充表单,它也不会生成单击按钮的代码。

按下按钮后,会出现一个加载屏幕,然后显示结果。通常,下一个代码应该将结果页返回到page变量中

HtmlElement theElement5 = (HtmlElement) page.getElementById("ctl00_ctl00_ctl00_cph1_cph1_QuickSearchAll1_QuickFlightSearchControl1_btnSearch");

page = (HtmlPage) theElement5.click();

但它只返回上一页并填写了表单。有没有特殊的方法来处理这个按钮,或者我找不到合适的按钮来点击?任何帮助都将不胜感激。

编辑:

我使用时得到的例外

ScriptResult result = page.executeJavaScript("document.getElementById('ctl00_ctl00_ctl00_cph1_cph1_QuickSearchAll1_QuickFlightSearchControl1_btnSearch_Table').onclick()");

final Page newPage = result.getNewPage();

低于

Exception in thread "main" ======= EXCEPTION START ========

EcmaError: lineNumber=[64] column=[0] lineSource=[] name=[TypeError] sourceName=[http://www.amadeusepower.com/trek/Amadeus/js/Functions.js] message=[TypeError: Cannot read property "cancelBubble" from undefined (http://www.amadeusepower.com/trek/Amadeus/js/Functions.js#64)]

com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot read property "cancelBubble" from undefined (http://www.amadeusepower.com/trek/Amadeus/js/Functions.js#64)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)

at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)

at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:555)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:530)

at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:979)

at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScript(HtmlPage.java:947)

at htmlunittest.test.com.TestEkoBilet.main(TestEkoBilet.java:51)

Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot read property "cancelBubble" from undefined (http://www.amadeusepower.com/trek/Amadeus/js/Functions.js#64)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3603)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3587)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3608)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3624)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3634)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getObjectPropNoWarn(ScriptRuntime.java:1488)

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1233)

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)

at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)

at com.gargoylesoftware.htmlunit.javascript.host.EventHandler.call(EventHandler.java:81)

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1531)

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)

at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)

at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)

at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:275)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)

at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:546)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:654)

... 7 more

Enclosed exception:

net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot read property "cancelBubble" from undefined (http://www.amadeusepower.com/trek/Amadeus/js/Functions.js#64)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3603)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3587)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3608)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3624)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3634)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getObjectPropNoWarn(ScriptRuntime.java:1488)

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1233)

at script.StopEvent(http://www.amadeusepower.com/trek/Amadeus/js/Functions.js:64)

at script.onclick(onclick event for HtmlTable[

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)

at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)

at com.gargoylesoftware.htmlunit.javascript.host.EventHandler.call(EventHandler.java:81)

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1531)

at script(injected script:1)

at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)

at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)

at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)

at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:275)

at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)

at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:546)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:654)

at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)

at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:555)

at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:530)

at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:979)

at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScript(HtmlPage.java:947)

at htmlunittest.test.com.TestEkoBilet.main(TestEkoBilet.java:51)

======= EXCEPTION END ========

我认为它试图访问站点中的其他脚本,但它不在当前页面上。HTMLUnit是否仍然可以通过某种函数访问这些脚本,或者这是它所能做到的?

编辑2:

我在页面开头附近找到了下面的脚本。这和搜索按钮有什么关系吗?好像有那个按钮的ID,但我不确定。

最佳答案:

如果无法单击按钮,请尝试此操作HtmlElement htmlElement = page.getFirstByXPath("//*[@id=\"ctl00_ctl00_ctl00_cph1_cph1_QuickSearchAll1_QuickFlightSearchControl1_btnSearch_Table\"]/tbody/tr/td[2]");

htmlElement.click();

如果这不是您要查找的内容,并且您已经处理了单击部分

我建议尝试等待页面和javascript加载和执行。

试试这个

webClient.waitForBackgroundJavaScript(1000);

webClient.setAjaxController(new NicelyResynchronizingAjaxController());

webClient.setAjaxController(new AjaxController(){

@Override

public boolean processSynchron(HtmlPage page, WebRequest request, boolean async)

{

return true;

}

});

JavaScriptJobManager manager = page.getEnclosingWindow().getJobManager();

while (manager.getJobCount() > 0) {

Thread.sleep(100);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值