首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebRequest登录后使用HtmlUnit导航网站

使用WebRequest登录后使用HtmlUnit导航网站
EN

Stack Overflow用户
提问于 2017-06-25 23:46:58
回答 1查看 343关注 0票数 0

我在使用HtmlUnit的点击功能登录表单时遇到了问题,所以我决定改用WebRequest登录。

站点的登录方式是表单的submit按钮是对单独URL的ajax调用。收到来自该POST请求的响应后,页面将自动重新加载,并且您将登录。

代码语言:javascript
复制
// Client configuration
    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setCssEnabled(false);
    webClient.setAjaxController(new NicelyResynchronizingAjaxController());

// Get cookies (Not sure if necessary to log in)
    HtmlPage webPage = (HtmlPage)webClient.getPage("https://www.marinetraffic.com/");
    URL cookieURL = new URL("https://www.marinetraffic.com/");
    String cookies = webClient.getCookies(cookieURL).toString();

// Configure request headings
    URL url = new URL("https://www.marinetraffic.com/en/users/ajax_login");
    WebRequest requestSettings = new WebRequest(url, HttpMethod.POST);

    requestSettings.setAdditionalHeader(":authority", "www.marinetraffic.com");
    requestSettings.setAdditionalHeader(":method", "POST");
    requestSettings.setAdditionalHeader(":path", "/en/users/ajax_login");
    requestSettings.setAdditionalHeader(":scheme", "https");
    requestSettings.setAdditionalHeader("accept", "*/*");
    requestSettings.setAdditionalHeader("accept-encoding", "gzip,deflate,sdch");
    requestSettings.setAdditionalHeader("accept-language", "en-US,en;q=0.8");
    requestSettings.setAdditionalHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
    requestSettings.setAdditionalHeader("cookie", cookies);
    requestSettings.setAdditionalHeader("origin", "https://www.marinetraffic.com");
    requestSettings.setAdditionalHeader("referer", "https://www.marinetraffic.com/en/ais/home/centerx:-33.1/centery:21.4/zoom:4");
    requestSettings.setAdditionalHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36");
    requestSettings.setAdditionalHeader("x-requested-with", "XMLHttpRequest");

// Request body with form information  
    requestSettings.setRequestBody("_method=POST&email=dummy%40gmail.com&password=fakepassword&is_ajax=true");


// redirectPage is of type UnexpectedPage
    Page redirectPage = webClient.getPage(requestSettings);
    webClient.waitForBackgroundJavaScript(10 * 1000);

// Console confirms login was a success
    System.out.println(redirectPage.getWebResponse().getContentAsString());
    System.out.println(webClient.getCookies(cookieURL).toString());

// When I try to navigate to the main page I am not logged in
    HtmlPage webPage2 = (HtmlPage)webClient.getPage("https://www.marinetraffic.com/");
    System.out.println(webPage2.asXml());

我还尝试使用更新后的cookies对主站点执行WebRequest GET调用,但也返回了一个UnexpectedPage。现在我已经正确登录了,我该如何使用HtmlPage来浏览这个网站呢?

EN

回答 1

Stack Overflow用户

发布于 2017-06-26 01:25:36

只需尝试像普通用户一样与此页面交互

  • 获取页面
  • 定位登录元素
  • 单击登录元素
  • 定位输入字段
  • 在字段
  • 找到并单击登录按钮

也许你必须在某个地方添加一些等待代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44747985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档