2014-11-05 69 views
0

我正在为页面dscan.me写一个刮板。它应该填写内容的形式,并提交输入按钮提交。我在这里没有看到任何问题,但我已经尝试了我所知道的有关HtmlUnit(并且不是太多)。火提交事件,执行javascripts并从结果中获取新页面...没有任何工作。 如果有更多经验的人会在这里发布工作解决方案,我会很高兴。Java HtmlUnit网页刮板新页面无法访问

这是我应得的控件和textarea的设置数据

HtmlForm form = page.getForms().get(0); 
HtmlTextArea textArea = form.getTextAreaByName("scandata"); 
HtmlSubmitInput button = form.getInputByValue("Submit"); 

textArea.setText(paste); 

我敢肯定,我有正确的控制和textarea的得到填补,但这恰恰与getNewPage空指针异常终止( )调用

ScriptResult scriptResult = button.fireEvent(Event.TYPE_SUBMIT); 

WebClientProvider.getSharedClient().waitForBackgroundJavaScript(10000); 

HtmlPage res = (HtmlPage) scriptResult.getNewPage(); 

这给了我为结果页面的默认页面控件...处理内容不是网页

String js_set = "$(\".inputbox\").val(\""+ paste.replaceAll("\n", "\\n").replaceAll("\t", "\\t") +"\");\n";  
String js_submit = "$(\".submitbutton\").click();";   
ScriptResult result = page.executeJavaScript(js_submit); 
WebClientProvider.getSharedClient().waitForBackgroundJavaScript(10000); 

HtmlPage res = (HtmlPage) scriptResult.getNewPage(); 

这里是您可以粘贴到dscan.me以查看工作流程的example数据。如果你有想法或找到解决方案或解决方法,我会很高兴为任何事情。谢谢!

回答

2

有些时候,JS需要时间来执行,所以你必须等待执行,最好是重试了一段时间,直到页面没有更新(使用任何条件)这里是例子的代码

HtmlForm form = page.getForms().get(0); 
HtmlTextArea textArea = form.getTextAreaByName("scandata"); 
HtmlSubmitInput button = form.getInputByValue("Submit"); 
HtmlPage res = button.click(); 
int input_length = page.getByXPath("//input").size(); 
int tries = 5; 
while (tries > 0 && input_length < 12) { //you can change number of tries and condition according to your need 
    tries--; 
    synchronized (page) { 
     page.wait(2000); //wait 
    } 
    input_length = page.getByXPath("//input").size(); //input length is example of condtion 
} 
+0

这肯定像你一样需要的方法。当你发布你的答案时,我只是想出了如何使用js命令。该页面需要一些时间来计算表单后面的所有内容,并且有些等待是适当的。 这让我很难用少量的代码。 感谢您的咨询!我将很快发布解决方案。 – 2014-11-06 14:34:07