XPath的主要目的是解决XML文档的各个部分。它还提供操纵弦乐,数字和布尔值的基本设施。 XPath使用紧凑的非XML语法。 XPath在XML文档的抽象逻辑结构上运行,而不是表面语法。
Selenium IDE 如何使用 xpath 提取属性的 id
我正在尝试获取 id 并将其存储为变量,如下/ 命令 目标 价值 储值 xpath=(//div[@class[starts-with(.,'commentItem')]]/@id)[1] ID 但我收到此错误消息...
我使用以下命令使用 xidel -e 提取两个值。 '//输入[@name="qid"]/@value[1]' “//跨度[@id='trueFinalResultCount']” 但我想将这两个结果放入 TSV 格式。 结果1<...
我正在尝试创建一个应用程序,用户可以在该应用程序中在浏览器中存储注释。 为了找出用户在文档中创建注释的位置,我尝试存储 xpath 和...
有没有办法从节点的某个实例获取 XPath 位置谓词? 所以我搜索了一个position(Node)函数,它返回DOM树中节点的位置。 示例:页面...
有没有办法将文字字符串附加到 XPath 表达式获得的任何内容上? 例如来自以下 XML: 我是 我想刺激...
尝试使用 Newrelic 合成监视器(基于硒)单击链接时,它似乎从几天开始就开始失败。错误的屏幕截图显示控件悬停在链接上...
Python Selenium - 根据跨度的内部文本获取同级链接
我已经为此工作了几个小时,但似乎无法将所有部分放在一起...... 所以给出: 链接 00A 我已经为此工作了几个小时,但似乎无法将所有部分放在一起...... 所以给出: <a href="link1">link</a> <span class="class_name">00A<span> ... <a href="link2">link</a> <span class="class_name">00B<span> ... <a href="link3">link</a> <span class="class_name">01B<span> ... <a href="link4">link</a> <span class="class_name">01A<span> 我试图根据 span 的内部文本获取链接。所以我知道... 我可以获得所有链接: links = [my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[contains(@class, 'class_name')]//preceding-sibling::a[@href]")))] 我可以通过以下方式获取单个跨度上的文本: print(driver.find_element(By.XPATH, "//span[contains(@class, 'class_name')]").text) 但我无法使用 find 元素来获取所有文本进行测试,因为它要求列表的文本。 我应该能够使用: [contains(text(), '\\d+[A]')]") 但我不知道如何将它与所有链接的代码结合起来。我觉得我忽略了一些非常愚蠢的事情,但现在是早上 6:30,我昨天晚上开始做这个项目,所以我放弃了,只是去问更聪明的人。预先感谢您的帮助。 注意contains()函数的第二个参数不是正则表达式;它是一个纯字符串,需要在第一个字符串参数中查找。我相信使用 Selenium 你会被 XPath 1.0 困住,它没有任何正则表达式函数。 在不使用正则表达式的情况下,如果您想过滤一组 span 元素以仅包含文本内容由一串数字后跟单个 A 组成的元素,则需要使用更复杂的表达式,其中组合了一堆字符串函数,例如像这样的东西: span[ contains(., 'A') and contains('0123456789', substring(., 1, 1)) and translate(substring-before(., 'A'), '0123456789', '') = '' and substring-after(., 'A') = '' ] 注意,. 是对“上下文节点”的引用,在谓词表达式中表示 span 元素之一。 这个表达的意思是: span元素 其中某处包含 A 字符;和 第一个字符是数字;和 A之前的文本完全由数字组成;和 A 之后没有任何文字(即最后只有一个 A) 顺便说一句,我不确定这个表达式是否符合您的想法: //span[contains(@class, 'class_name')]//preceding-sibling::a[@href] 澄清一下:XPath 中的 // 是表达式 /descendant-or-self::node()/ 的 缩写。所以你的表达式可以写成: //span[contains(@class, 'class_name')] /descendant-or-self::node()/preceding-sibling::a[@href] 这将返回每个 a 元素(具有 href 属性),后面跟着一个兄弟元素,即 either: 一个 span 元素,其 class 属性为 'class_name'; 或 span 元素的后代,其 class 属性为 'class_name'。 如果您知道 span 和 a 实际上是兄弟姐妹,那么您可以将 // 替换为更简单的 /(在我下面的建议中)。 这里要注意的另一件事是,除非每对span(或span后代)和a都包含在父元素中,否则preceding-sibling::a[@href]步骤将返回a元素在span之前,而不仅仅是第一个这样的span(我怀疑你想要做什么,因为我认为是在span之前的立即为链接提供了标签。你可以将谓词 [1] 应用于 a[@href] 元素集以仅获取第一个(按 preceding-sibling 顺序)。 因此,为了结合这些想法,这是我的建议: //span [contains(@class, 'class_name')] [ contains(., 'A') and contains('0123456789', substring(., 1, 1)) and translate(substring-before(., 'A'), '0123456789', '') = '' and substring-after(., 'A') = '' ] //preceding-sibling::a[@href][1] 应用于此输入: <body> <a href="link1">link</a> <span class="class_name">00A</span> ... <a href="link2">link</a> <span class="class_name">00B</span> ... <a href="link3">link</a> <span class="class_name">01B</span> ... <a href="link4">link</a> <span class="class_name">01A</span> </body> ...它产生: <a href="link1">link</a> <a href="link4">link</a>
我想在Python中用Xpath解析以下内容。 省份 我想在Python中使用Xpath解析以下内容。 <h3>Province</h3> <ul> <li><a href="?k=*&program_language=ENGLISH&province_code=ON">Ontario (5853)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=BC">British Columbia (2096)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=AB">Alberta (1241)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=QC">Québec (921)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=NS">Nova Scotia (895)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=SK">Saskatchewan (847)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=MB">Manitoba (615)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=NB">New Brunswick (347)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=NL">Newfoundland & Labrador (305)</a> <li><a href="?k=*&program_language=ENGLISH&province_code=PE">Prince Edward Island (120)</a> </ul> 我的Python代码如下: url=r'https://universitystudy.ca/search-programs/?k=&program_level_merged=&program_language=ENGLISH' resq=req.get(url) content=html.fromstring(resq.content) category==content.xpath('//h3[text()="Area of Study"]/following-sibling::ul/li/a/text()') 虽然我希望获得如下所示的程序名称列表,但我的代码返回一个空列表, 无法弄清楚代码出了什么问题。 Business administration and management, general (520) Computer science (289) Mathematics, general (279) Psychology, general (277) Economics, general (250) Biology/biological sciences, general (249) Geography (241) English language and literature, general (240) Chemistry, general (220) Political science and government, general (211) History, general (200) 我发现问题是由于以下原因造成的 resq=req.get(url) 实际上,服务器拒绝了 req.get 请求并且对 resq 不返回任何内容 HTTP 403 Forbidden 客户端错误响应状态码表示服务器理解请求但拒绝处理它。
XPath:如何访问 XML 架构上的 xs:appinfo 元素内的信息
我正在努力使用 XPath 访问 xs:appinfo 元素内的信息 我在 xs:appinfo 元素内有另一个结构良好的 XML。有没有办法直接访问
无法在 WSO2 EI / MI 中使用 jsonpath/xpath 获取 JSON ARRAY 元素
我在下面分享了示例 JSON 负载。 { “多重属性”:[ { “属性”: [ { &...
在odoo中,我尝试更改招聘表格,但某些结构元素没有名称或id。当我更改这些元素时,它最初工作正常,但是当我升级数据库时......
我正在尝试将文本发送到搜索框中,该搜索框将自动列出与文本匹配的项目。我想选择与搜索文本完全匹配的记录。 例子: 我正在尝试将文本发送到搜索框,该搜索框将自动列出与文本匹配的项目。我想选择与搜索文本完全匹配的记录.. 示例: <!DOCTYPE html> <html lang="en"> <head><title>Test Selection</title></head> <body> <ul id='navlist'> <li> <table style='border:1px solid black'><tr><td>1234</td><tr><td>Johnas</td><tr><td>Active</td></tr></table> </li> <li> <table style='border:1px solid blue'><tr><td>0234</td><tr><td>Philips</td><tr><td>Active</td></tr></table> </li> <li> <table style='border:1px solid green'><tr><td>2235</td><tr><td>Joseph</td><tr><td>InActive</td></tr></table> </li> </ul> </body> </html> 当我发送文本 0234 时,它列出了两条记录 1234 和 0234 。但我想单独选择第二个,即 0234。 我可以使用 xpath = "//ul/li/table" 选择第一条记录,但发现很难找到与发送文本完全匹配的记录。 尝试过, contains(.,'0234'), contains(text()='0234'), contains(Text()='0234') 。但不起作用。 包含文本()还检查数字。 我会使用类似 //ul/li[table//tr/td[1] = '0234'] 的内容来选择包含 li 的 table 元素,其中行的第一个 td 的值为 0234。 小提琴示例。
我尝试在 Google 电子表格中使用 =IMPORTXML(),但收到“导入的内容为空”。即使使用正确的 xpath_query 参数。我在这里使用了 xPath Generator 工具。 我明白了...
Symfony \ Component \ CssSelector \ Exception \ SyntaxErrorException cssselector 到 laravel 中的 xpath
我有以下html select元素,select元素的属性名称包含方括号,需要使用domcrawler进行过滤,但不幸的是,CssSelectorConvertor()无法转换cssleec...
下面的网址会打开一个表格,我们只需选择会计年度并点击搜索即可获取该年度的数据,但搜索年份也会打开与以下相同的网址 - https://cf...
我在页面上有几个总计,我需要获取其中包含 2.5 的总计 总计 1.5 我在页面上有几个总计,我需要获取其中包含 2.5 的总计 <div class="cell--NEHKQ _align-left--Yc_tL">Total 1.5</div> <div class="cell--NEHKQ _align-left--Yc_tL">Total 2.5</div> 我尝试使用以下代码 //div[contains(.,'Total') and contains(.,'2.5')] 但是它发现页面上有大量与我需要的元素不相关的元素。 有没有一个简单的解决方案来查找包含 的文本? //div[contains(.,'Total2.5')]
网站链接 - https://demoqa.com/automation-practice-form/ 我正在尝试寻找主题字段的自动建议选项的 xpath
我有一个由顽皮的网络开发人员编写的文档,看起来像: 这是一些没有 p 标签的文本。哦,我们再写一些吧。 <... 我有一个由顽皮的网络开发人员编写的文档,看起来像: <div id="details"> Here is some text without a p tag. Oh, let's write some more. <br> <br> And some more. <table id="non-unique"> ... </table> Replaces the following numbers: <table id="non-unique"> ... good stuff in here </table> </div> 所以,它没有很好地标记。我需要获取其中包含好东西的表,但是,它没有唯一的 id 值并且它并不总是按相同的顺序,或者位于 div 的最后一个等。 唯一运行的主题是它始终遵循文本 Replaces the following numbers:,尽管该文本可能与上面示例中的一样,或者有时位于 h4 元素中! 是否可以使用 XPath 表达式通过搜索替换字符串然后询问下一个表元素来整理此表? 谢谢! 这对我来说似乎是有效的: //text()[contains(.,"Replaces the following numbers")]/following-sibling::table[1] 没有规定 id 必须是唯一的。 使用: //node()[self::h4 or self::text()] [normalize-space() = 'Replaces the following numbers:'] /following-sibling::*[1][self::table] 基于XSLT的验证: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/"> <xsl:copy-of select= "//node()[self::h4 or self::text()] [normalize-space() = 'Replaces the following numbers:'] /following-sibling::*[1][self::table] "/> </xsl:template> </xsl:stylesheet> 当此转换应用于提供的文档时(已更正为格式良好的 XML 文档): <div id="details"> Here is some text without a p tag. Oh, let's write some more. <br /> <br /> And some more. <table id="non-unique"> ... </table> Replaces the following numbers: <table id="non-unique"> ... good stuff in here </table> </div> 计算 XPath 表达式并将所选节点复制到输出: <table id="non-unique"> ... good stuff in here </table> 当相同的转换(XPath 表达式)应用于此 XML 文档时: <div id="details"> Here is some text without a p tag. Oh, let's write some more. <br /> <br /> And some more. <table id="non-unique"> ... </table> <h4>Replaces the following numbers:</h4> <table id="non-unique"> ... good stuff in here </table> </div> 再次选择想要的元素并输出: <table id="non-unique"> ... good stuff in here </table> 不可以,因为 XPath 需要格式良好的 Xml 才能运行。 参见。 这个答案,它提供了一些额外的信息。
我目前正在使用 Ruby 和 xPath 开发一个小型网络抓取项目。不幸的是,该网站的结构非常糟糕,这给我带来了一个小问题: 相关标题 我目前正在使用 Ruby 和 xPath 开发一个小型网络抓取项目。不幸的是,该网站的结构非常糟糕,这给我带来了一个小问题: <h3>Relevant Headline</h3> <p class="class_a class_b">Content starts in this paragraph...</p> <p class="class_a ">...but this content belongs to the preceding paragraph</p> <p class="class_a class_b">Content starts in this paragraph...</p> <p class="class_a ">...but this content belongs to the preceding paragraph</p> <h3>Some other Headline</h3> 如您所见,有 2 个 h3-Tags 框住了多个 p-tags。我希望选择所有带框的 p 标签。我已经找到了以下 xPath 来做到这一点: h3[contains(text(),"Relevant")]/following-sibling::p[1 = count(preceding-sibling::h3[1] | ../h3[contains(text(),"Relevant")])] 但现在困难来了:上面的两段是在一起的。 class_b 的段落(第一个)开始一个新的数据条目,下一个(第二个)属于该条目。 3和4是一样的。问题是:有时 3 个段落属于在一起,有时是 4 个段落,但大多数时候有一对段落属于在一起。 如何在 Ruby 中按组选择这些内部段落并将它们组合成一个字符串? 如果您不介意使用 xpath 和 nokogiri 的组合,您可以这样做: paragraph_text = Array.new doc.xpath('//p[preceding-sibling::h3[1][contains(text(), "Relevant")]]').each do |p| if p.attribute('class').text.include?('class_b') paragraph_text << p.content else paragraph_text[-1] += p.text end end puts paragraph_text #=> ["Content starts in this paragraph......but this content belongs to the preceding paragraph", "Content starts in this paragraph......but this content belongs to the preceding paragraph"] xpath 基本上用于获取段落标签。然后,使用 nokogiri/ruby 迭代段落并制定字符串。 可以用 xpath 来完成,但我认为用 slice_before 将它们分组更容易: doc.search('*').slice_before{|n| n.name == 'h3'}.each do |h3_group| h3_group.slice_before{|n| n[:class] && n[:class]['class_b']}.to_a[1..-1].each do |p_group| puts p_group.map(&:text) * ' ' end end 更新 使用 css 的另一个选项: doc.search('p.class_b').each do |p| str, next_node = p.text, p while next_node = next_node.at('+ p:not([class*=class_b])') str += " #{next_node.text}" end puts str end