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 回答