使用HtmlUnit会产生很长的错误列表

时间:2013-08-26 17:03:12

标签: java htmlunit

我要做的是访问网站,从两个下拉列表中选择项目,在框中键入内容,然后按一个按钮。然后,我希望得到的结果文本将放在您无法输入的框中。

我想要使用的网站是http://www.worldlingo.com/en/products_services/worldlingo_translator.html,这是我的代码,除了获取最终文本(我不知道该怎么做)之外,它还会执行我要做的所有事情。

try {
        final WebClient webClient = new WebClient();
        Page page = webClient.getPage("http://www.worldlingo.com/en/products_services/worldlingo_translator.html");

        HtmlSelect select = ((HtmlSelect) page).getElementById("SelSrcLang");
        HtmlOption option = select.getOptionByValue("English");
        select.setSelectedAttribute(option, true);

        HtmlSelect select2 = ((HtmlSelect) page).getElementById("SelTrgLang");
        HtmlOption option2 = select2.getOptionByValue("French");
        select.setSelectedAttribute(option2, true);

        final HtmlForm form = ((HtmlPage) page).getFormByName("form");         
        final HtmlSubmitInput button =  form.getInputByName("Translate");
        final HtmlTextInput textField =  form.getInputByName("wl_ft_print_text");        
        textField.setValueAttribute("How are you?");

        page = (HtmlPage) form.getInputByValue("Translate").click();

        System.out.println("Finished");

    } catch (FailingHttpStatusCodeException e) { } catch (MalformedURLException e) { } catch (IOException e) { }

编辑:更改后

Page page = webCLient...

HtmlPage page = webCLient...

我没有错误但是当我跑步时我得到以下错误

  

线程“main”中的异常com.gargoylesoftware.htmlunit.ElementNotFoundException:elementName = [option] attributeName = [value] attributeValue = [English]       在com.gargoylesoftware.htmlunit.html.HtmlSelect.getOptionByValue(HtmlSelect.java:437)       在maple.Main.main(Main.java:43)

第43行

HtmlOption option = select.getOptionByValue("English");

1 个答案:

答案 0 :(得分:0)

80%的错误"你所说的实际上是警告。这些大多是JavaScript不符合你可能会忽略的(如果你真的有权访问代码,那么在服务器中是正确的,我猜你不会因为看起来你正在网页抓取这个页面)。

19%的实际错误与无法创建的Flash对象有关。这是有道理的,因为HtmlUnit无法处理闪存。检查另一个类似的问题:Faster page processing with HtmlUnit。无论如何,您还应该忽略这些错误,因为它们实际上应该是信息性消息。

1%是不允许您运行代码的实际错误:

Exception in thread "main" java.lang.ClassCastException:
    com.gargoylesoftware.htmlunit.html.HtmlPage cannot be cast to 
    com.gargoylesoftware.htmlunit.html.HtmlSelect
    at maple.Main.main(Main.java:42)

尽管我不能告诉第42行哪一行我敢打赌这是这一行:

HtmlSelect select = ((HtmlSelect) page).getElementById("SelSrcLang");

您有一个HtmlPage对象,并将其投射到HtmlSelect。这将产生上述例外。可能你试图这样做:

HtmlSelect select = (HtmlSelect) page.getElementById("SelSrcLang");

请注意,只有在使用HtmlPage而不是Page对象时,此功能才有效。请参阅JavaDoc

我希望这个远程调试会话有所帮助:)