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

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

时间:2023-11-16 12:03:58浏览次数:32  
标签: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://blog.51cto.com/u_10632206/8416077

相关文章

  • Eclipse安装中文语言包导致部分页面功能和工作区域无法加载或使用的解决办法
    Eclipse安装中文语言包插件(eclipse菜单栏:“Help”—>“InstallNewSoftware”)出现:“Welcome”页面无法加载,“TaskList”“Outline”等工作区无法使用等情况。针对这种情况,需要卸载安装的中文语言包插件。具体步骤为:eclipse菜单栏—>“帮......
  • Streamlit 快速构建交互式页面的python库
    基础介绍streamlit是什么Streamlit是一个面向机器学习和数据科学团队的开源应用程序框架,通过它可以用python代码方便快捷的构建交互式前端页面。streamlit特别适合结合大模型快速的构建一些对话式的应用,可以看到一些行业内热门的使用。项目本身也比较成熟,release版本,start数量等都......
  • 批量导出多个页面为pdf文件
    添加多个页面组件ref,每个页面组件加一个回调函数来判断此页面数据是否已经加载完毕,加载完毕所有页面后执行导出importReact,{useContext,useEffect,useRef,useState}from'react';importstylesfrom'./index.less';importcontextfrom'@/layouts/context';import......
  • 导出当前页面为PDF文件
    html2canvas+jspdfimportuseCompToPDFfrom'@/hooks/use-pdf-hooks/usePDFHooks';constref=useRef<HTMLDivElement>(null);const{exportPDf}=useCompToPDF({fileName:'导出文件'});<buttononClick={()=>{exportPDf(ref.cur......
  • js处理前端页面复选框多页复选同时生效的问题
    虽然是后端开发,但在实际的工作中难免会碰到一些前端相关的任务需要自己处理,下面就是本人开发工作中处理的前端相关分页复选的问题。总结一下,以备日后重复遇到:<scripttype="text/javascript">//初始化数据$(function(){$('#queryButton').removeAttr('disabled'......
  • cshtml页面中动态生成URL,Url.RouteUrl()与 Url.Action()有什么区别
    原文链接:http://cn.voidcc.com/question/p-yrfdusit-kx.htmlRouteUrl根据路由名称生成url。如果您有多个参数相似的路由,则Action方法可能会选择错误的路由-它会根据路由定义的顺序工作。这可能发生在您的路线具有可选参数时。如果您想确保使用某个路由网址,您需要呼叫RouteUrl......
  • kubernetes web管理页面安装(二)
    参考文件: https://cloud.tencent.com/developer/article/1919416参考命令: https://blog.51cto.com/smbands/4903848 查看当前集群nodekubectlgetnode 下载dashboard组件wgethttps://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.......
  • Nginx 禁止页面缓存
    location^~/vue{add_headerCache-Control"no-cache,private,no-store,must-revalidate,max-stale=0,post-check=0,pre-check=0";indexindex.html;alias/home/zhuge/project/test/dist/;try_files......
  • js---判断用户是否在浏览当前页面
    最近遇到一个需求,需要判断用户是否在当前页面,只有用户在当前页面才可以播放视频,如果切换到其他窗口就要将视频暂停掉,避免学生刷课程,以下是具体的代码:<scripttype="text/javascript"src="js/jquery-1.8.3.min.js"></script><scripttype="text/javascript">varindex=0,ti......
  • 微信小程序--自定义tabbar切换页面时,保留数据方案
    自定义的tabbar组件,每次切换页面时都会重新加载页面和数据,需要通过一些方法把tabbar菜单的数据保留下来,不要每次都请求数据。方案一:在app.js文件里定义全局数据(本次项目采用的是可以在后台管理里配置的数据,所以采用了方案一)1、在app.js文件里定义一个全局变量App({  globa......