0

我想做的是去一个网站,从两个下拉列表中选择项目,在一个框中输入一些东西,然后按下一个按钮。然后,我想获得将在您无法输入的框中的结果文本。

我想使用的网站是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...

我没有收到任何错误,但是当我运行时出现以下错误

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

第 43 行是

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

1 回答 1

0

您所说的 80% 的“错误”实际上是警告。这些主要是您可能会忽略的 JavaScript 不符合项(如果您实际上可以访问代码,或者在服务器中更正,我猜您似乎没有,因为您似乎在抓取页面)。

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

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

线程“主”java.lang.ClassCastException 中的异常:
    com.gargoylesoftware.htmlunit.html.HtmlPage 无法转换为
    com.gargoylesoftware.htmlunit.html.HtmlSelect
    在 maple.Main.main(Main.java:42)

虽然我不知道哪一行是第 42 行,但我敢打赌是这个:

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

那里有一个HtmlPage对象,并且正在将其转换为HtmlSelect. 这将产生上述异常。可能您正在尝试这样做:

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

请注意,这仅在您使用HtmlPagePage对象时才有效。请参阅JavaDoc

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

于 2013-08-26T19:11:50.060 回答