我正在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;
}
}
我没有在这里展示,但我仔细检查了我的完整代码,我真的不在我想要的页面中。
发生了什么事?为什么点击不起作用?
答案 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的例子,当你遇到一个页面时请求完成)