首页 > 其他分享 >htmlunit 模拟登入、点击、获取页面信息

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

时间:2023-10-06 21:35:23浏览次数:27  
标签:htmlunit -- System 登入 println new out webClient 页面

本文介绍了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;
    }

标签:htmlunit,--,System,登入,println,new,out,webClient,页面
From: https://www.cnblogs.com/lixiuming521125/p/17745056.html

相关文章

  • 华为云云耀云服务器L实例评测 | 3分钟搞懂如何在华为云服务器安装Nginx并配置静态访问
    文章目录一、什么是Nginx?二、申请华为云服务器三、使用XShell连接华为云服务器并安装Nginx四、FileZilla连接服务器五、Linux下安装Nginx❇️配置80端口并关闭Linux防火墙✳️测试六、配置静态html至华为云服务器并访问⚠️在华为服务器新建路径⏰使用Filezilla上传文件至华为云服务器⚡......
  • vue:登录后跳转到之前要访问的页面([email protected])
    一,安装pinialiuhongdi@lhdpc:/data/vue/responsive$npm-Sinstallpinia安装完成后查看已安装的版本:liuhongdi@lhdpc:/data/vue/[email protected]/data/vue/responsive└──[email protected]二,代码:1,store/redirect.js123456......
  • 使用Springboot实现点击名称跳转到详情页面
    终于解决出来啦!!!嘎嘎嘎嘎~~~只需要在td标签里面嵌套上a标签就能实现啦!这里主要看一下功能,页面直接使用的白板~html页面的具体代码如下(将超链接标签a的样式进行了美化):<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>主界面</title></head>......
  • 超级实用!React-Router v6实现页面级按钮权限
    大家好,我是王天~今天咱们用reac+reactRouter来实现页面级的按钮权限功能。这篇文章分三部分,实现思路、代码实现、踩坑记录。嫌啰嗦的朋友,直接拖到第二章节看代码哦。前言通常情况下,咱们为用户添加权限时,除了页面权限,还会细化到按钮级别,比如、新增、删除、查看等权限。如下效......
  • 《DjangoApp开发》第二集,创建项目骨架、主菜单页面及跳转
    2023年10月3日这节课做的事情创建项目目录对项目进行全局时间、配置创建项目骨架,配置一堆文件写主页面切换页面项目结构。当我们发现代码很长的时候就分成多个子目录菜单界面对战界面玩家玩家的技能玩家的每一个技能玩家的移动背景时间设置界......
  • 新建小程序页面
    新建小程序页面只需要在app.json->pages中新增页面的存放路径,小程序开发者工具即可帮我们自动创建对应的页面文件,如图所示:  2、修改项目的首页只需要调整app.json->pages中的前后顺序,即可修改项目的首页,小程序会把排在第一位的页面,当作项目首页进行渲染,如图所示: ......
  • destoon 列表页面增加手动选择排序方式
    在mobile/include/mall.inc.php 行60 $order=$MOD['order'];  之前增加排序方式判断如果有order参数则$order接受参数,没有就用默认  $order=$MOD['order'];  1、增加排序以后的mobileurl函数,伪静态规则  ViewCode 伪静态规则 ViewCode  2、模......
  • Odoo 页面-‘action’-官方文档解释
    1、图示总概览-动作分类窗口动作(WindowActions)------(ir.actions.act_window)网址URL动作(URLActions)------(ir.actions.act_url)服务器动作(ServerActions)------(ir.actions.server)报告动作(ReportActions)------(ir.actions.report.xml)客户动作(ClientActions)------(ir.a......
  • 记一次前端页面加载方式调整导致的数据库连接数暴增
    一、问题现象1.连接数飙升8.218点起,主库活跃连接数显著飙升,至10:30左右逼近数据库最大连接数平时活跃会话平均数约31问题期间活跃会话平均数高达322,超出正常10倍以上从连接用户看,其中一个用户明显高于其他12-16点,将该用户连接切换至从库,从库连接数显著飙升16点后,cs_rw用户连接切......
  • uni-app中提供的五种形式的页面跳转
    面试题:uni-app中提供的五种形式的页面跳转:①导航跳转/保留跳转——在访问历史栈中保存当前页面,再打开下一个页面<navigatoropen-type="navigate"url="">②导航返回——返回访问历史栈中的上一个页面<navigatoropen-type="navigateBack">③重定向跳转/销毁跳转——不......