我要做的是访问网站,从两个下拉列表中选择项目,在框中键入内容,然后按一个按钮。然后,我希望得到的结果文本将放在您无法输入的框中。
我想要使用的网站是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");
答案 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。
我希望这个远程调试会话有所帮助:)