0

私がやろうとしているのは、Web サイトにアクセスし、2 つのドロップダウン リストから項目を選択し、ボックスに何かを入力して、ボタンを押すことです。次に、入力できないボックスに表示される結果のテキストを取得したいと思います。

私が使用したいサイトは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: elementName=[option] attributeName=[value] attributeValue=[English] at com.gargoylesoftware.htmlunit.html.HtmlSelect.getOptionByValue(HtmlSelect.java:437) at maple .Main.main(メイン.java:43)

43行目は

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

1 に答える 1

0

あなたが話している「エラー」の 80% は、実際には警告です。これらは主に、おそらく無視できる JavaScript の不適合です (または、実際にコードにアクセスできる場合はサーバーで修正しますが、ページを Web スクレイピングしているように見えるため、アクセスできないと思います)。

実際のエラーの 19% は、Flash オブジェクトを作成できないことに関連しています。HtmlUnit はフラッシュを処理できないため、これは理にかなっています。この他の同様の質問を確認してください: 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");

これは、HtmlPagenot aPageオブジェクトを使用する場合にのみ機能することに注意してください。JavaDocを参照してください。

このリモート デバッグ セッションがお役に立てば幸いです :)

于 2013-08-26T19:11:50.060 に答える