0

ページウォールからIDとしてテキストボックスを取得しようとしてu_0_1eいますが、HtmlUnitは何も見つけられません。最後の行が出力されnullます。コードは次のとおりです。

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);

        WebClient client = new WebClient(BrowserVersion.CHROME);
        JavaScriptEngine engine = new JavaScriptEngine(client);

        client.setJavaScriptEngine(engine);
        HtmlPage home = client.getPage("https://www.facebook.com/login.php");
        HtmlSubmitInput login = (HtmlSubmitInput) home.getElementById("u_0_1");
        HtmlTextInput name = (HtmlTextInput) home.getElementById("email");
        HtmlPasswordInput pass = (HtmlPasswordInput) home.getElementById("pass");

        name.setValueAttribute("myname");
        pass.setValueAttribute("mypass");

        HtmlPage page = login.click();
        HtmlPage wall = client.getPage("https://www.facebook.com/");

        System.out.println(wall.getElementById("u_0_1e"));
4

1 に答える 1

0

あなたの問題についていくつかコメントがあります。

まず、HtmlUnit のログを無効にしました。したがって、JavaScript に問題がある場合、それは表示されません。実際に JavaScript エラーが発生している場合、JavaScript コードは完全には実行されません。取得しようとしている要素が (おそらく AJAX を使用して) サーバーから動的に取得された場合、JavaScript エラーが発生すると、その要素が取得されない可能性があります。

Webscraping を使用している場合は、JS を制御できないため、JS が機能していないことを受け入れるか、JS を無効にして AJAX 要求を手動で処理するしかありません。

もちろん、ページは実際のブラウザーで完全に動作することがわかりますが、HtmlUnit が使用する JavaScript エンジンが実際のブラウザーとは異なることを考慮してください。

次に、単語を含む 2 行engineはまったく必要ありません。

第 3 に、以前の質問で述べたように、これはFacebook APIを使用して処理する方が適しています。

最後に、この別の回答が役に立つかもしれません: JavaScript not being applied in HtmlUnit

于 2013-11-14T01:06:17.917 に答える