Dom 如何从URL中提取网页的相对XPath
我正在编写一个程序,列出网页中的元素及其相应的XPath。 使用Java和JSoup,我想提取为任何给定网页中的所有元素动态创建的相对XPath。一个完整的和小的工作实用程序肯定会帮助我在这里 我想要像这样的东西: //*[@id=menu-item-13686]/a 样本输出: 元素或节点或组件名称:xxxx和Xpath=/*[@id=menu-item-13686]/aDom 如何从URL中提取网页的相对XPath,dom,xpath,jsoup,html-parsing,sample,Dom,Xpath,Jsoup,Html Parsing,Sample,我正在编写一个程序,列出网页中的元素及其相应的XPath。 使用Java和JSoup,我想提取为任何给定网页中的所有元素动态创建的相对XPath。一个完整的和小的工作实用程序肯定会帮助我在这里 我想要像这样的东西: //*[@id=menu-item-13686]/a 样本输出: 元素或节点或组件名称:xxxx和Xpath=/*[@id=menu-item-13686]/a 谢谢你我想你可以从这个开始 这个问题在使用Java10编译的jOOX-1.6.1版本中得到了修复 提及 下面的代码片段选择
谢谢你我想你可以从这个开始 这个问题在使用Java10编译的jOOX-1.6.1版本中得到了修复 提及 下面的代码片段选择所有元素,并为每个元素打印节点名、标记名和CSS选择器以及唯一选择此元素的Xpath
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.joox.selector.CSS2XPath;
public class TestParser {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("https://theuserisdrunk.com/").get();
Elements elements = doc.select("*");
for (Element element : elements) {
String path = CSS2XPath.css2xpath(element.cssSelector(), true);
System.out.println("Node name : " + element.nodeName());
System.out.println(" Tag : " + element.tagName());
System.out.println(" CSS : " + element.cssSelector());
System.out.println(" XPath : " + path + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
样本输出:
Node name : div
Tag : div
CSS : #mc-embedded-subscribe-form > div.clear:nth-child(4)
XPath : //*[@id='mc-embedded-subscribe-form']/div[@class='clear' or starts-with(@class, 'clear ') or ' clear' = substring(@class, string-length(@class) - string-length(' clear') + 1) or contains(@class, ' clear ')][count(preceding-sibling::*) = 4 - 1]
Node name : input
Tag : input
CSS : #mc-embedded-subscribe
XPath : //*[@id='mc-embedded-subscribe']
Node name : p
Tag : p
CSS : #mc_embed_signup > p.intern:nth-child(2)
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 2 - 1]
Node name : a
Tag : a
CSS : #mc_embed_signup > p.intern:nth-child(2) > a
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 2 - 1]/a
Node name : p
Tag : p
CSS : #mc_embed_signup > p.intern:nth-child(3)
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 3 - 1]
Node name : i
Tag : i
CSS : #mc_embed_signup > p.intern:nth-child(3) > i
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 3 - 1]/i
Node name : p
Tag : p
CSS : #mc_embed_signup > p.intern:nth-child(4)
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 4 - 1]
Node name : a
Tag : a
CSS : #mc_embed_signup > p.intern:nth-child(4) > a:nth-child(1)
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 4 - 1]/a[count(preceding-sibling::*) = 1 - 1]
Node name : a
Tag : a
CSS : #mc_embed_signup > p.intern:nth-child(4) > a:nth-child(2)
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 4 - 1]/a[count(preceding-sibling::*) = 2 - 1]
Node name : i
Tag : i
CSS : #mc_embed_signup > p.intern:nth-child(4) > i
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 4 - 1]/i
Node name : a
Tag : a
CSS : #mc_embed_signup > p.intern:nth-child(4) > a:nth-child(4)
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 4 - 1]/a[count(preceding-sibling::*) = 4 - 1]
Node name : a
Tag : a
CSS : #mc_embed_signup > p.intern:nth-child(4) > a:nth-child(5)
XPath : //*[@id='mc_embed_signup']/p[@class='intern' or starts-with(@class, 'intern ') or ' intern' = substring(@class, string-length(@class) - string-length(' intern') + 1) or contains(@class, ' intern ')][count(preceding-sibling::*) = 4 - 1]/a[count(preceding-sibling::*) = 5 - 1]
Node name : script
Tag : script
CSS : html > body > script:nth-child(3)
XPath : //html/body/script[count(preceding-sibling::*) = 3 - 1]
Node name : script
Tag : script
CSS : html > body > script:nth-child(4)
XPath : //html/body/script[count(preceding-sibling::*) = 4 - 1]
欢迎来到堆栈溢出!请阅读页面并更新您的问题。Hello@JeroenHeier,正如建议的那样,我已更新了我的问题,但不确定为什么被否决。Hello@Luk,谢谢,我已看到提供的链接,但是,我正在以另一种方式寻找。实际上,我正在尝试从网页中为所有现有元素或组件动态构建列表XPath的地图。谢谢你,阿比拉斯,我将尝试一下。谢谢你的回复。你好,阿比拉什,谢谢你的帮助。我已经尝试过这个代码,它工作了,但实际上是部分工作。我得到的示例输出是html>body>div.wrap>div.text>p:nth-child4>a.website:nth-child1,但我正在寻找类似于/html/body/div[2]/div/p[2]/a[1]的内容,这些内容取自chrome inspect,或者更准确地说,我想要html页面中每个组件或链接的相对路径。你能帮我做这个吗?谢谢@NewBieDev,更新了使用jooqSweet获取xpath的答案!谢谢@Abhilash,让我试试这个。非常感谢您的快速回复。再次感谢@NewBieDev,你得到你想要的了吗?