xpath 相关问题

XPath的主要目的是解决XML文档的各个部分。它还提供操纵弦乐,数字和布尔值的基本设施。 XPath使用紧凑的非XML语法。 XPath在XML文档的抽象逻辑结构上运行,而不是表面语法。

Python 上使用 Selenium 的 XPath 似乎不起作用

我正在尝试检查网站上的“strong”元素是否包含文本“状态:可用”,然后将文本添加到列表中。这是我当前的代码: def add_input(self, b...

回答 1 投票 0

如何从特定标签中获取文本?

我有以下来源,我想从标签图像的特定属性获取文本 我可以使用以下 xpath 访问图像标签。 //*[name()='g' 并包含(@entityid, '

回答 1 投票 0

为什么我的 OR 运算符在 XPATH 上不起作用?

我都试过了 //th[text()="卖方融资可用"]/following-sibling::td[text()="是" OR text()=""] 和 //th[text()="卖方融资可用"]/

回答 1 投票 0

org.openqa.selenium.InvalidArgumentException:无效参数:无效定位器

我正在尝试使用 Appium 进行混合应用程序测试。我正在尝试通过 xpath 获取元素。但我面临以下问题。 org.openqa.selenium.WebDriverException:org.openqa.selenium。

回答 1 投票 0

选择属性@id对应当前节点的属性@newid的元素()(仅限XPATH)

文字1 文字2 <content> <root> <parametrs @id='par1'><displayText>Text1</displayText></parametrs> <parametrs @id='par2'><displayText>Text2</displayText></parametrs> <parametrs @id='par3'><displayText>Text3</displayText></parametrs> </root> </content> ... <paragraph @newid='par3'>Any text</paragraph> 我用 ancestor::content/root/parametrs[@id = ../@newid]/displayText/ 并且没有效果 但是 ancestor::content/root/parametrs[@id = 'par1']/displayText/ 是工作 ./@newid就是工作 怎么了? 出了什么问题?在谓词(方括号)内,上下文项发生变化,因此“..”从 parametrs 元素中进行选择(因此什么也不选择)。 这是一个连接查询,纯 XPath 1.0 中的连接很棘手(从技术上讲,该语言在关系上并不完整 - 因为它需要范围变量)。 XSLT 中有很多解决方案,但不清楚您是否需要 XSLT 解决方案(您的问题说“ONLY XPATH”,但您已将其标记为 XSLT)。 XPath 2.0+ 中也有简单的解决方案,但您尚未使用 XPath 版本标记问题,所以我不知道 XPath 2.0+ 解决方案对您是否有用。如果您使用的框架(例如 Selenium)尚未采用更新的 XPath 规范,那么您的选择非常有限。

回答 1 投票 0

等待 Puppeteer 中的 xpath

在我用 Puppeteer 抓取的页面上,我有一个每个 li 具有相同 id 的列表。我正在尝试查找并单击此列表中具有特定文本的元素。我有以下代码: 等待...

回答 2 投票 0

是否有 JMESPath 相当于 XPath 双斜杠 (//)“任何后代”搜索?

在 XPath 中,要搜索与特定路径匹配的任何后代(例如,以 b 元素作为子元素的任何级别的 a 元素),可以使用查询 //a/b。 例如,对于以下文档 在 XPath 中,要搜索与特定路径匹配的任何后代,例如,以 a 元素作为子元素的任何级别的 b 元素,可以使用查询 //a/b。 例如,对于以下文档 <foo> <bar> <a><b>first</b></a> </bar> <a><b>second</b></a> </foo> 使用前面提到的 xpath,我们会找到元素 <b>first</b> 和 <b>second</b>。 JSON 和 JMESPath 是否有等效项? 例如: { "foo": { "bar": { "a": {"b": "first"} }, "a": {"b": "second"} } } 从上面的文档中,是否可以检索到{"b": "first"}和{"b": "second"}? 不。以下查询 foo.a 给予 { "b": "second" } 和 foo.*.a 给予 [ { "b": "first" } ]

回答 1 投票 0

如何传递 XML 路径来检查 lxml 中的兄弟关系 - python

我的python函数获取元素的属性值 将 lxml.etree 导入为 ET def xml_get_attrib_value(文件路径,xpath,属性): it = ET.iterparse(文件路径) 对于 _, el 其中: _...

回答 1 投票 0

我可以通过 XML 文档查询路径而不仅仅是叶子吗?

当我使用 XPATH 查询 XML 文档时,我只得到匹配的节点作为结果。有没有办法让匹配的节点及其父节点一直到根? 让我们把这个非常迷你...

回答 1 投票 0

SQL/XML 中的 XPath1,计数元素返回空

我使用的是 PostgreSQL 9,它采用 XPath-1 来实现 SQL/XML 标准合规性。 这个查询没问题,返回了预期的数据: 从 t 中选择 xpath('//img',xhtm) 但这另一张,数一下img

回答 2 投票 0

逻辑应用程序xpath函数以编码格式返回结果

我有一个与此类似的 xml 代码: 我有一个与此类似的 xml 代码: <?xml version="1.0" encoding="UTF-8"?> <part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="payload"> <process xmlns="http://xmlns.oracle.com/CommonBaswareHTTPWrapperProvider/CommonBasware_HTTPWrapperProviderBPEL"> <BaswareRequest xmlns="http://xmlns.oracle.com/CommonBaswareHTTPWrapperProvider/BaswareRequest"> <BOName>yy</BOName> <FileName>xx.xml</FileName> <Action>SEND</Action> <BOMessage> <DocumentElement xmlns=""> <Item> <Text_1>123</Text_1> <Text_2>123 CIO Office HOF</Text_2> <Text_3>SWEDEN</Text_3> <Text_4>3650</Text_4> <Text_5>SWEDEN</Text_5> <Text_6>True</Text_6> <Text_EN /> <Active>True</Active> <Company>001</Company> </Item> </DocumentElement> </BOMessage> </BaswareRequest> </process> </part> 我想提取元素 BOMessage 及其所有内容,并在稍后的代码中使用它。 在逻辑应用程序中,我创建了一个 compose 操作并在其中编写了以下代码: xpath(xml(triggerBody()), '//*[local-name()="BOMessage"]') 此操作的输出返回一个奇怪的编码代码: [ { "$content-type": "application/xml;charset=utf-8", "$content": "PEJPTWVzc2FnZSB4bWxucz0iaHR0cDovL3htbG5zLm9yYWNsZS5jb20vQ29tbW9uQmFzd2FyZUhUVFBXcmFwcGVyUHJvdmlkZXIvQmFzd2FyZVJlcXVlc3QiPg0KICAgICAgICAgICAgICAgIDxEb2N1bWVudEVsZW1lbnQgeG1sbnM9IiI+DQogICAgICAgICAgICAgICAgICAgIDxJdGVtPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfMT4xMjM8L1RleHRfMT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XzI+MTIzIENJTyBPZmZpY2UgSE9GPC9UZXh0XzI+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF8zPlNXRURFTjwvVGV4dF8zPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfND4zNjUwPC9UZXh0XzQ+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF81PlNXRURFTjwvVGV4dF81Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfNj5UcnVlPC9UZXh0XzY+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF9FTiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPEFjdGl2ZT5UcnVlPC9BY3RpdmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8Q29tcGFueT4wMDE8L0NvbXBhbnk+DQogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4NCiAgICAgICAgICAgICAgICA8L0RvY3VtZW50RWxlbWVudD4NCiAgICAgICAgICAgIDwvQk9NZXNzYWdlPg==" } ] 我尝试用 xpath 函数、xml() 和 base64ToString() 包围 decodeBase64() 函数,但它们都返回错误并且似乎不起作用。 知道如何解决这个问题吗? 这是正常现象。当您尝试访问 xpath 输出数组的第一个元素时,您会对结果感到满意。尝试在“撰写”操作中使用以下内容,就可以了: xpath(xml(triggerBody()), '//*[local-name()="BOMessage"]')?[0]

回答 1 投票 0

其子元素以元素 X 开头和结尾的元素的 XPath?

这是我的例子: 强调文本后跟任何其他文本并以强调文本...结尾 这是我的例子: <div> <p><em>Emphasized text</em> followed by any <span>other text</span> and ending with an <em>emphasized text</em></p> </div> 我想要的是抓住这段以em开头并以em结尾的段落。这些标签之间可能是文本,包括其他内联标签,如 span、img、a 等。 一个现实世界的例子可以是一些学术和报纸写作规则,当你必须强调已经强调的文本中的文本时,你取消强调中的强调,即作者介绍或参考书目: 如果我们有这样一句话: -- John Doe 是《强调中的强调》一书的作者。 -- 一种打印规则是这样写: 约翰·多伊 (John Doe) 是《强调中强调》一书的作者。 但是当你要打印这一段强调时,它就会变成: 约翰·多伊 (John Doe) 是强调中强调书的作者。 与参考书目演示相同: John Doe,强调内部强调,纽约,出版商名称,2024 年。 强调的变成: John Doe, 强调强调,纽约,出版商名称,2024 年。 考虑某些文本(作者、姓名、出版商名称或书名)可能锚定到链接。 这个问题是上一个问题的延伸,我们只是在寻找一个以p开始和结束的em。提供了一些答案,涵盖处理 p 后跟一个或多个 em 的简单或更复杂的情况,并且标签之间没有其他文本。这里的区别在于,标签之间有一些文本,但主要目的是相同的:段落的开头和结尾强调了中间可能存在的任何内容。 这个 xpath 会得到这样的段落 //*[./*[1][name()="em"] and ./*[last()][name()="em"]] 同样使用child轴//*[child::*[1][name()="em"] and child::*[last()][name()="em"]] 这个 XPath, //p[node()[1][self::em]][node()[last()][self::em]] 将根据要求选择其子元素以 p 元素开头和结尾的所有 em 元素

回答 2 投票 0

Xpath 选择以节点 y 开始和结束的节点 x

这是我的例子: 强调文本后跟任何其他文本并以强调文本...结尾 这是我的例子: <div> <p><em>Emphasized text</em> followed by any <span>other text</span> and ending with an <em>emphasized text</em></p> </div> 我想要的是抓住这段以em开头并以em结尾的段落。在这些标签之间可以是文本,包括其他内联标签,如 span、img、a 等。 一个现实世界的例子可以是一些学术和报纸写作规则,当你必须强调已经强调的文本中的文本时,你取消强调中的强调,即作者介绍或参考书目: 如果我们有这样一句话: -- John Doe 是《强调中的强调》一书的作者。 -- 一种打印规则是这样写: 约翰·多伊 (John Doe) 是《强调中强调》一书的作者。 但是当你要打印这一段强调时,它就会变成: 约翰·多伊 (John Doe) 是强调中强调书的作者。 与参考书目演示相同: John Doe,强调内部强调,纽约,出版商名称,2024 年。 强调的变成: John Doe, 强调强调,纽约,出版商名称,2024 年。 考虑某些文本(作者、姓名、出版商名称或书名)可能锚定到链接。 这个问题是上一个问题的延伸,我们只是在寻找一个以p开始和结束的em。提供了一些答案,涵盖处理 p 后跟一个或多个 em 的简单或更复杂的情况,并且标签之间没有其他文本。这里的区别在于,标签之间有一些文本,但主要目的是相同的:段落的开头和结尾强调了中间可能存在的任何内容。 这个 xpath 会得到这样的段落 //*[./*[1][name()="em"] and ./*[last()][name()="em"]] 同样使用child轴//*[child::*[1][name()="em"] and child::*[last()][name()="em"]]

回答 1 投票 0

仅包含名为 X 的子元素的元素的 XPath?

假设我有这个例子: 一些文字 强调文字一些其他文字 我要截取的段落 ... 假设我有这个例子: <div> <p>some text <em>emphasized text</em> some other text</p> <p><em>The paragraph I want to capture</em></p> <p>some text <em>emphasized text</em> some other text and <em>other em text</em> until the end.</p> </div> 我要选择的是第二段(但也可能是第三段或第一段)。问题是这里 p 和 em 是相邻的。 <p> 和 <em> 之间没有任何文字,开头和结尾都没有。所有文字都在里面<em>xyz</em>。 如何通过 XPath 查询获取它? 我尝试了//p/em,//p/child:em,//em/parent:p,所有这些都选择了三个段落,因为所有em都是p的子级。 //p[starts-with(.,'./em')]也没有帮助。 这是另一个 Xpath,它将选择只有 em 而没有直接文本的段落。 //p[not(text())][em] 更新 根据评论,OP 澄清: 是的,我想捕获仅包含强调文本的任何段落,它是否包含在一个或多个em标签中。 因此,这次更新了 XPath, //p[em][not(node()[not(self::em)])] 将选择带有一个或多个 p 子元素的所有 em 元素,但不选择任何类型的其他子元素 — 仅选择完全强调的段落。 旧答案 这个 XPath, //p[count(node())=1][em] 将选择具有单个子节点(即 p 元素)的所有 em 元素。 说明 //p 选择文档中的所有 p 元素。 [count(node())=1] 仅过滤那些具有单个子 p 的 node() 元素。由于 node() 匹配 any 类型的节点(包括元素节点和文本节点),因此它将确保仅选择具有任何类型的单个子代的 p 元素。 [em] 仅过滤那些具有 p 子元素的单子 em 元素。 因此,对于您输入的XML/HTML,只有目标p, <p><em>The paragraph I want to capture</em></p> 将被选中。如果还有另一个 p 带着三个 em 孩子, <p><em>Do</em><em>not</em><em>select</em></p> 或一个 em 子元素和其他元素子元素, <p><em>Do</em><sup>not</sup><sub>select!</sub><span> or else!</span></p> 此类p元素将不会被选择。 警告:当前接受的答案中的XPath,//p[not(text())][em],然而,会选择这样的p元素,这在我看来并不是您的意图。

回答 2 投票 0

Python-Selenium:Chrome 无头设置不适用于“WebDriverWait”

以下代码可以在真实浏览器中通过,但在无头浏览器中则不行。 而真实: 尝试: #明确等待 打印(“尝试4”) WebDriverWait(驱动程序, 10).until(EC.

回答 3 投票 0

仅具有单个子元素的元素的 XPath?

假设我有这个例子: 一些文字 强调文字一些其他文字 我要截取的段落 ... 假设我有这个例子: <div> <p>some text <em>emphasized text</em> some other text</p> <p><em>The paragraph I want to capture</em></p> <p>some text <em>emphasized text</em> some other text and <em>other em text</em> until the end.</p> </div> 我要选择的是第二段(但也可能是第三段或第一段)。问题是这里 p 和 em 是相邻的。 <p> 和 <em> 之间没有任何文字,开头和结尾都没有。所有文字都在里面<em>xyz</em>。 如何通过 XPath 查询获取它? 我尝试了//p/em,//p/child:em,//em/parent:p,所有这些都选择了三个段落,因为所有em都是p的子级。 //p[starts-with(.,'./em')]也没有帮助。 这个 XPath, //p[count(node())=1][em] 将选择具有单个子节点(即 p 元素)的所有 em 元素。

回答 1 投票 0

没有兄弟姐妹的单个子元素的 XPath?

假设我有这个例子: 一些文字 强调文字一些其他文字 我要截取的段落 ... 假设我有这个例子: <div> <p>some text <em>emphasized text</em> some other text</p> <p><em>The paragraph I want to capture</em></p> <p>some text <em>emphasized text</em> some other text and <em>other em text</em> until the end.</p> </div> 我要选择的是第二段(但也可能是第三段或第一段)。问题是这里 p 和 em 是相邻的。 <p> 和 <em> 之间没有任何文字,开头和结尾都没有。所有文字都在里面<em>xyz</em>。 如何通过 XPath 查询获取它? 我尝试了//p/em,//p/child:em,//em/parent:p,所有这些都选择了三个段落,因为所有em都是p的子级。 //p[starts-with(.,'./em')]也没有帮助。 这个 XPath, //[count(node())=1]p[em] 将选择具有单个子节点(即 p 元素)的所有 em 元素。

回答 1 投票 0

Xpath 从子级或父级的相邻子级中选择连续的父级

假设我有这个例子: 一些文字 强调文字一些其他文字 我要截取的段落 &... 假设我有这个例子: <div> <p>some text <em>emphasized text</em> some other text</p> <p><em>The paragraph I want to capture</em><p> <p>some text <em>emphasized text</em> some other text and <em>other em text</em> until the end.</p> </div> 我要选择的是第二段(但也可能是第三段或第一段)。问题是这里 p 和 em 是相邻的。 <p> 和 <em> 之间没有任何文字,开头和结尾都没有。所有文字都在里面<em>xyz</em>。 如何通过 XPath 查询获取它? 我尝试了 //p/em、//p/child:em、//em/parent:p,所有这些都选择三个段落,因为所有“em”都是“p”的子级。 //p[starts-with(.,'./em')]也没有帮助。 这个 XPath, //[count(node())=1]p[em] 将选择具有单个子节点(即 p 元素)的所有 em 元素。

回答 1 投票 0

CSS选择器-如何定位父元素

有没有办法在CSS选择器中定位父元素? 我正在使用下面的代码,但我没有获取父元素。 WebElement we=dr.findElement(By.cssSelector("div[id='gf-BIG']:parent")); ...

回答 4 投票 0

python xpath 表达式查找包含给定文本的任何属性

我有以下XML文档: 我有以下 XML 文档: <RootNode> <SubNode name="MainNode" SubNodeID="1"> <SubSubNode SubSubID="10" SubSubName="Product Food"> <Item subItemID="100" ItemName="Apple" OtherName="Gala"/> <Item subItemID="101" ItemName="Apple" OtherName="Aroma"/> <Item subItemID="102" ItemName="Pear" OtherName="Williams"/> <Item subItemID="103" ItemName="Pear" OtherName="Abate"/> <Item subItemID="104" ItemName="Cranberry" OtherName="Bilberry"/> <Item subItemID="105" ItemName="Cranberry" OtherName="Bluberries"/> <Item subItemID="106" ItemName="Strawberry" OtherName="Berry"/> <Item subItemID="107" ItemName="Peach" OtherName="Nectarina"/> </SubSubNode> <SubSubNode SubSubID="20" SubSubName="Product Beverage"> <Item subItemID="108" ItemName="Cola" OtherName="Coca cola"/> <Item subItemID="109" ItemName="Cola" OtherName="Pepsi"/> <Item subItemID="110" ItemName="Orange Juice" OtherName="Fanta"/> <Item subItemID="111" ItemName="Soft drink" OtherName="Grape soda"/> <Item subItemID="112" ItemName="Soft drink" OtherName="Orange soda"/> <Item subItemID="113" ItemName="Soft drink" OtherName="Grape soda"/> </SubSubNode> </SubNode> </RootNode> 我用通常的语句加载它: tree = ET.parse('Food.xml') root = tree.getroot() 我可以找到具有特定属性的特定项目,例如 OtherName="Gala" 使用 xPath = "SubNode/SubSubNode/Item[@OtherName='Gala']" print(len(root.findall(xPath))) 如果我想搜索任意属性中的文本怎么办? 使用 XPath 语句我会写这样的内容: //*[@*[contains(., 'berry')]] 但是在 Python 中实现它时,我得到了“SyntaxError: invalid predicate:” search_text = "berry" # XPath expression to match any element with any attribute containing 'search_text' xpath_expr = ".//*[@*[contains(., '{search_text}')]]" 有什么想法吗? 谢谢你的帮助 正如评论中所述,lxml 是更好的方法。没有 xpath 的替代解决方案: import xml.etree.ElementTree as ET xml_s = """<RootNode> <SubNode name="MainNode" SubNodeID="1"> <SubSubNode SubSubID="10" SubSubName="Product Food"> <Item subItemID="100" ItemName="Apple" OtherName="Gala"/> <Item subItemID="101" ItemName="Apple" OtherName="Aroma"/> <Item subItemID="102" ItemName="Pear" OtherName="Williams"/> <Item subItemID="103" ItemName="Pear" OtherName="Abate"/> <Item subItemID="104" ItemName="Cranberry" OtherName="Bilberry"/> <Item subItemID="105" ItemName="Cranberry" OtherName="Bluberries"/> <Item subItemID="106" ItemName="Strawberry" OtherName="some text"/> <Item subItemID="107" ItemName="Peach" OtherName="Nectarina"/> </SubSubNode> <SubSubNode SubSubID="20" SubSubName="Product Beverage"> <Item subItemID="108" ItemName="Cola" OtherName="Coca cola"/> <Item subItemID="109" ItemName="Cola" OtherName="Pepsi"/> <Item subItemID="110" ItemName="Orange Juice" OtherName="Fanta"/> <Item subItemID="111" ItemName="Soft drink" OtherName="Grape soda"/> <Item subItemID="112" ItemName="some text" OtherName="Orange soda"/> <Item subItemID="113" ItemName="Soft drink" OtherName="Grape soda"/> </SubSubNode> </SubNode> </RootNode>""" root = ET.fromstring(xml_s) element_list = [] for some_text in root.iter(): if "some text" in some_text.attrib.values(): # print(some_text.tag, some_text.attrib) element_list.append(some_text) # Or find the keys with some text for elem in element_list: keys = [k for k, v in elem.attrib.items() if v == 'some text'] print(keys) 输出: ['OtherName'] ['ItemName']

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.