Java 无法使用htmlunit单击google地图页面上的链接
目前,我正试图用htmlunit控制google map JP。 以下是谷歌地图JP。 在我的浏览器中,左侧的旧式视图中有一个菜单,它在我点击地区名称后显示城市名称。我想使用htmlunit执行相同的操作,但没有任何更改。 请给我一些想法,并帮助我使用servlet atmJava 无法使用htmlunit单击google地图页面上的链接,java,eclipse,google-maps,servlets,htmlunit,Java,Eclipse,Google Maps,Servlets,Htmlunit,目前,我正试图用htmlunit控制google map JP。 以下是谷歌地图JP。 在我的浏览器中,左侧的旧式视图中有一个菜单,它在我点击地区名称后显示城市名称。我想使用htmlunit执行相同的操作,但没有任何更改。 请给我一些想法,并帮助我使用servlet atm package com.example.part1; import java.util.List; import java.io.IOException; import javax.servlet.ServletExcep
package com.example.part1;
import java.util.List;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
@WebServlet(“/test")
public class test extends HttpServlet {
private static final long serialVersionUID = 1L;
public test() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
response.setContentType("text/html; charset=Windows-31J");
final WebClient webClient = new WebClient(BrowserVersion.CHROME, "198.23.143.27", 5555);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page1 = webClient.getPage("https://maps.google.co.jp/");
List<HtmlAnchor> links = (List<HtmlAnchor>) page1.getByXPath("//a[@href='javascript:void(0)']");
//click 北海道
links.get(12).click();
webClient.waitForBackgroundJavaScript(10000);
response.getWriter().write(page1.getWebResponse().getContentAsString());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
给你
欢迎任何意见。
提前谢谢
编辑
仍在寻找解决方案单击锚定时,将结果保存在HtmlPage中,如下所示:
page1 = links.get(12).click();
添加了类来点击按钮,还添加了我点击后收到的页面截图
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class Test {
public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.waitForBackgroundJavaScript(10000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = webClient.getPage("https://maps.google.co.jp/");
List<HtmlAnchor> links = (List<HtmlAnchor>) page.getByXPath("//a[@href='javascript:void(0)']");
page = links.get(12).click();
FileWriter writer = new FileWriter("d:\\test.html"); //To write page in file
writer.write(page.asXml());
}
}
r您确定列表中的元素12位于您要单击的相应锚点中??谢谢您的评论。是的。我非常确定元素12是正确的。它显示“北海道,如果您有任何想法,请帮助我…@user3348619我已经在我的系统上进行了测试,通过对代码进行上述更改,它可以正常工作。您还可以使用asXml方法查看pageHi Niks。我尝试了“page1=links.get12.click;”和page1.asXml”。但它在单击之前显示完全相同。如果可能,您可以粘贴您测试的代码吗?提前谢谢。@user3348619我已经添加了代码并粘贴了单击后收到的图像。Sry,可能我的解释不太好。嗯…通常谷歌JP会在点击地区名称后显示城市名称。单击“州名称”后,其名称将消失,或者显示其城市名称或城市名称列表。看看图片的左侧。然后,用我们的代码,它仍然显示州名,没有城市名,与不点击相比没有任何变化。请看图片的右边,谢谢。