当前位置: 首页 > 知识库问答 >
问题:

如何查找给定文本的html元素

陈实
2023-03-14

假设我有以下代码要使用JSoup进行解析

<body> 
  <div id="myDiv" class="simple" >
    <p>
	  <img class="alignleft" src="myimage.jpg" alt="myimage" />
	  I just passed out of UC Berkeley
    </p>
  </div> 
</body>

问题是,如果只给出一个关键字“Berkeley”,是否有更好的方法在html中查找元素/XPath(或者它的列表,如果该关键字多次出现的话),该html将该关键字作为其文本的一部分。

我手头没有看到html,只能在运行时使用。

我当前的实现——使用JavaJSOUP,迭代body的子元素,获得“ownText”和每个子元素的文本,然后深入到它们的子元素以缩小html元素的范围。我觉得这很慢。

共有2个答案

冀子石
2023-03-14

请尝试以下xpath:

对于具有的第一个元素:

'//*[contains(normalize-space(), "Berkeley")]/ancestor::*[@class]'

对于id为的第一个元素

'//*[contains(normalize-space(), "Berkeley")]/ancestor::*[@id]'

检查规范化空间

薛元忠
2023-03-14

不优雅但简单的方式可能看起来像:

import java.util.HashSet;
import java.util.Set;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Tag;
import org.jsoup.select.Elements;

public class JsoupTest {

    public static void main(String argv[]) {
        String html = "<body> \n" +
                      "  <div id=\"myDiv\" class=\"simple\" >\n" +
                      "    <p>\n" +
                      "   <img class=\"alignleft\" src=\"myimage.jpg\" alt=\"myimage\" />\n" +
                      "   I just passed out of UC Berkeley\n" +
                      "    </p>\n" +
                      "    <ol>\n" +
                        "    <li>Berkeley</li>\n" +
                        "    <li>Berkeley</li>\n" +
                      "    </ol>\n" +
                      "  </div> \n" +
                      "</body>";
        Elements eles = Jsoup.parse(html).getAllElements(); // get all elements which apear in your html
        Set<String> set = new HashSet<>(); 
        for(Element e : eles){
           Tag t = e.tag();
           set.add(t.getName());  // put the tag name in a set or list
        }
        set.remove("head"); set.remove("html"); set.remove("body"); set.remove("#root"); set.remove("img");  //remove some unimportant tags 
        for(String s : set){
             System.out.println(s);
             if(!Jsoup.parse(html).select(s+":contains(Berkeley)").isEmpty()){ // check  if the tag contains your key word
             System.out.println(Jsoup.parse(html).select(s+":contains(Berkeley)").get(0).toString());} // print it out or do something else
            System.out.println("---------------------");
            System.out.println();            
        }       
     }   
  }
 类似资料:
  • 我想在微软赎回代码页面中自动测试 https://account.microsoft.com/billing/redeem 我试图通过以下代码输入值: 检查显示的元素: 我尝试了很多方法没有工作,花了4个小时不能弄清楚请纠正我的代码环境: > EclipseIDE-Java-Selenium最新版本 Mac OS-Chrome 正确的代码来查找元素。

  • 我想点击一个网站上的按钮。有没有一个代码可以让我通过使用文本字段来点击元素?我既不能使用资源id字段,也不能使用名称,因为它们是空的。我尝试使用xpath单击元素,但没有成功。

  • 我在一次采访中被问到以下问题。虽然我用n元树回答了这个问题,但有人告诉我这还不够好。所以,我很好奇,什么是它的最佳解决方案。 输入:整数数组:[2,3,7]和总和:10 输出:加起来等于和的所有数组元素组合(例如2、2、3、3、7等) 谢了小泰

  • 问题内容: 假设我有一个html表单。每个输入/选择/文本区域都将有一个对应的属性,该属性设置为其同伴的ID。在这种情况下,我知道每个输入将只有一个标签。 给定javascript中的input元素(例如,通过onkeyup事件),找到与其关联标签的最佳方法是什么? 问题答案: 首先,扫描页面上的标签,并从实际的表单元素中分配对标签的引用: 然后,您可以简单地进行以下操作: 无需查找数组:)

  • 这只是代码的一个片段,但我如何将其合并以查找以任何顺序包含这两个关键字(keyword1、keyword2)的元素呢?这听起来很容易原则上,它可能是,但我有一个地狱的时间试图得到这个。任何建议都将不胜感激,谢谢。

  • 问题内容: 对于Java开发人员来说,这必须是一个非常基本的问题,但是在给定 类名* 的情况下找到合适的 jar文件 的最佳方法是什么? * 例如,给定“ com.ibm.websphere.security.auth.WSSubject ”,您如何跟踪适当的jar文件?(“ google”不是我要找的答案!) 在Java文档不给jar文件的任何暗示,明显的jar文件的名称本身不提供线索。 在Ja