htmlunit 模拟登入、点击、获取页面信息

本文介绍了htmlunit 模拟登入、点击、获取页面信息的demo

public static String getHtml(String url) {
        System.out.println("****************开始执行****************");
        // 模拟一个浏览器
        @SuppressWarnings("resource")
        WebClient webClient = new WebClient();
        // webclient参数载体
        WebClientOptions clientOptions = webClient.getOptions();
        // 设置webClient的相关参数
        clientOptions.setJavaScriptEnabled(true);
        clientOptions.setCssEnabled(false);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.getCookieManager().setCookiesEnabled(true);
        webClient.getOptions().setRedirectEnabled(true);
        clientOptions.setTimeout(35000);
        clientOptions.setThrowExceptionOnScriptError(false);

        // 模拟浏览器打开一个目标网址
        HtmlPage rootPage = null;
        try {
            rootPage = webClient.getPage(url);
            // 等待JS驱动dom完成获得还原后的网页
            webClient.waitForBackgroundJavaScript(10000);
            System.out.println(new Date() + "--开始登入tplink");
            HtmlPasswordInput input = (HtmlPasswordInput)rootPage.getElementById("lgPwd");
            //设置密码
            input.setValue("设置你的密码");
            HtmlButtonInput select = (HtmlButtonInput)rootPage.getElementById("loginSub");
            HtmlPage page = select.click();
            System.out.println(new Date() + "--登入tplink");
            webClient.waitForBackgroundJavaScript(10000);
            System.out.println(new Date() + "--开始进入应用管理");
            HtmlElement appsMgbtn = (HtmlElement)page.getElementById("appsMgtMbtn");
            HtmlPage appsPage = appsMgbtn.click();
            System.out.println(new Date() + "--进入应管理");
            webClient.waitForBackgroundJavaScript(10000);
            System.out.println(new Date() + "--开始进入ddns");
            Iterable<DomElement> iterable = appsPage.getElementById("appsInstallList").getChildElements();
            while (iterable.iterator().hasNext()) {
                DomElement item = iterable.iterator().next();
                DomNodeList<HtmlElement> list = item.getElementsByTagName("span");
                if (list != null && list.size() > 0) {
                    String name = list.get(0).getVisibleText();
                    if (StringUtils.equals(name, "DDNS")) {
                        DomNodeList<HtmlElement> inputList = item.getElementsByTagName("input");
                        if (inputList.size() > 1) {
                            HtmlButtonInput target = (HtmlButtonInput)inputList.get(1);
                            HtmlPage pageDns = target.click();
                            System.out.println(new Date() + "--进入ddns");
                            webClient.waitForBackgroundJavaScript(10000);
                            HtmlButtonInput ddnsLogin = (HtmlButtonInput)pageDns.getElementById("ddnsLogin");
                            String display = ddnsLogin.getStyleElement("display").getValue();
                            if (!StringUtils.equals("none", display)) {
                                ddnsLogin.click();
                                System.out.println(new Date() + "--点击登入");
                                webClient.waitForBackgroundJavaScript(10000);
                            } else {

                                System.out.println(new Date() + "--已经登入,不用点击!");
                            }
                        }
                    }
                }
            }
        } catch (FailingHttpStatusCodeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // body html信息
        HtmlElement htmlElement = rootPage.getBody();
        String xmlContent = htmlElement.asXml();
        webClient.close();
        System.out.println("****************执行结束****************");
        return xmlContent;
    }
posted @ 2023-10-06 21:22  啄木鸟伍迪  阅读(117)  评论(0编辑  收藏  举报
//火箭 GenerateContentList();