热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javafx如何找到webview中的iframe内容

背景页面有两个iframe,iframe的属性都一致,需要获取第一个iframe,最终获取到里面的节点内容。注意,如果通过

背景

页面有两个iframe,iframe的属性都一致,需要获取第一个iframe,最终获取到里面的节点内容。注意,如果通过iframe需要定位到dom元素进行模拟点击,看是否可以直接通过iframe的src,直接通过webview浏览器进行加载定位

转化为文本格式

Document doc &#61; webview.getEngine().getDocument();NodeList bodys &#61; doc.getElementsByTagName("iframe");int countt&#61;0;for(int i&#61;0;i<bodys.getLength();i&#43;&#43;){Node bodyitem &#61; bodys.item(i);NamedNodeMap bodyitemAttribute &#61; bodyitem.getAttributes();Node itemname &#61; bodyitemAttribute.getNamedItem("class");if(itemname!&#61;null){if ("ke-edit-iframe".equals(itemname.getTextContent())){//这步很重要&#xff0c;将node转换成HTMLIFRAMEELEMENT或者您需要的HTMLINPUTELEMENT等HTMLIFrameElement itemname1 &#61; (HTMLIFrameElement) bodyitem;Document iframeContentDoc &#61; itemname1.getContentDocument();Element rootElement &#61; iframeContentDoc.getDocumentElement();NodeList rootElement &#61;iframeContentDoc.getDocumentElement().getElementsByTagName("body");//结果System.out.println(rootElement.item(0).getTextContent());}else{System.out.println("not found");}}}

转换为html格式代码打印到console

Document doc &#61; webview.getEngine().getDocument();NodeList bodys &#61; doc.getElementsByTagName("iframe");int countt&#61;0;for(int i&#61;0;i<bodys.getLength();i&#43;&#43;){Node bodyitem &#61; bodys.item(i);NamedNodeMap bodyitemAttribute &#61; bodyitem.getAttributes();Node itemname &#61; bodyitemAttribute.getNamedItem("class");if(itemname!&#61;null){if ("ke-edit-iframe".equals(itemname.getTextContent()) && (i&#61;&#61;0)){HTMLIFrameElement itemname1 &#61; (HTMLIFrameElement) bodyitem;Document iframeContentDoc &#61; itemname1.getContentDocument();NodeList rootElement &#61; iframeContentDoc.getDocumentElement().getElementsByTagName("body");Transformer transformer &#61; null;try {transformer &#61; TransformerFactory.newInstance().newTransformer();} catch (TransformerConfigurationException e) {e.printStackTrace();}transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");transformer.setOutputProperty(OutputKeys.METHOD, "html");transformer.setOutputProperty(OutputKeys.INDENT, "yes");transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");try {transformer.transform(new DOMSource(rootElement.item(0)),new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));} catch (TransformerException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}rootElement.item(0).setTextContent("cccccccccc");}else{System.out.println("not found");}}}

转换为html格式到字符串

Document doc &#61; webview.getEngine().getDocument();NodeList bodys &#61; doc.getElementsByTagName("iframe");int countt&#61;0;for(int i&#61;0;i<bodys.getLength();i&#43;&#43;){Node bodyitem &#61; bodys.item(i);NamedNodeMap bodyitemAttribute &#61; bodyitem.getAttributes();Node itemname &#61; bodyitemAttribute.getNamedItem("class");if(itemname!&#61;null){if ("ke-edit-iframe".equals(itemname.getTextContent()) && i&#61;&#61;1){HTMLIFrameElement itemname1 &#61; (HTMLIFrameElement) bodyitem;Document iframeContentDoc &#61; itemname1.getContentDocument();NodeList rootElement &#61; iframeContentDoc.getDocumentElement().getElementsByTagName("body");Transformer transformer &#61; null;try {transformer &#61; TransformerFactory.newInstance().newTransformer();} catch (TransformerConfigurationException e) {e.printStackTrace();}transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");transformer.setOutputProperty(OutputKeys.METHOD, "html");transformer.setOutputProperty(OutputKeys.INDENT, "yes");transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");ByteArrayOutputStream bos &#61; new ByteArrayOutputStream();try {transformer.transform(new DOMSource(rootElement.item(0)),new StreamResult(bos));} catch (TransformerException e) {e.printStackTrace();}System.out.println(bos.toString());}else{System.out.println("not found");}}}&#96;&#96;&#96;


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
mobiledu2502912677
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有