单击HtmlArea上的(),没有任何变化,为什么?

时间:2012-05-10 15:58:56

标签: htmlunit

我正在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;
    }
}

我没有在这里展示,但我仔细检查了我的完整代码,我真的不在我想要的页面中。

发生了什么事?为什么点击不起作用?

1 个答案:

答案 0 :(得分: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的例子,当你遇到一个页面时请求完成)