1

私は HtmlUnity を試していますが、javaScript で領域をクリックしようとすると問題が発生しました。

コードは次のとおりです。

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlArea;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlMap;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class ToPost {

    /**
     * @param args
     * @throws IOException 
     * @throws MalformedURLException 
     * @throws FailingHttpStatusCodeException 
     */
    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        HtmlPage page;
        final WebClient webClient = new WebClient();
        page = webClient.getPage("http://www.hidrografico.pt/previsao-mares.php");
        System.out.println(page.getTitleText());
        HtmlPage pagePortoLeixoes = setPort(page, "362,64,440,90");
        System.out.println("Are they the same? "+page.asXml().equals(pagePortoLeixoes.asXml()));
    }

    private static HtmlPage setPort(HtmlPage page, String coordinatesPort) throws IOException {
        HtmlMap map = page.getHtmlElementById("FPMap1");
        Iterable<HtmlElement> childAreas = map.getChildElements();
        HtmlArea tempArea;
        for (HtmlElement htmlElement : childAreas) {
            tempArea = (HtmlArea) htmlElement;
            if(tempArea.getCoordsAttribute().equals(coordinatesPort)){
                System.out.println("Found Leixoes! --> "+ tempArea.asXml());
                return tempArea.click();
            }
        }
        return null;
    }
}

ここには示していませんが、完全なコードを再確認して、目的のページにないことを確認します。

何が起こっている?クリックが機能しないのはなぜですか?

4

1 に答える 1

0

「複雑な」JavaScript が関係している場合、HtmlUnit .click() はしばしばうまく機能しません。

http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/html/HtmlElement.html#click ()

この要素のクリックをシミュレートし、要素がクリックされた後にフォーカスを持つウィンドウ内のページを返します。返されるページは、クリックされた要素のタイプ、JavaScript アクション リスナーの存在などに応じて、元のページと同じである場合と異なる場合があることに注意してください。

この場合、データを取得する別の方法を見つける必要があります。

私が見たのは、.rssリンクを使用すると、都市への直接リンクが得られることです...例: http://www.hidrografico.pt/previsao-mares-aveiro.php

別の方法は、POST リクエストを偽造することでした (たとえば、ページの取得に行き詰まったときにどのリクエストが行われるかを Httpfox で確認してください)。

于 2012-05-11T15:32:25.723 に答える