xpath 相关问题

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

访问 iframe 问题 - 用于自动化测试的 python selenium

我正在尝试访问以下 iframe: 但我尝试的所有操作都无法找到它,因此无法找到first_name_value 元素来与文本框交互并填充文本框。 两条路

回答 1 投票 0

Java:无效选择器:指定了无效或非法的选择器

我正在尝试单击付款弹出窗口上的一个元素: 卡号: 我正在尝试单击付款弹出窗口中的一个元素: <label data-v-533987c6="" xpath="1">Card Number:</label> <input data-v-533987c6="" type="tel" data-mask="#### #### #### ####" data-previous-value="" xpath="1"> 具有以下 xPath: @FindBy(name = "//div[contains(@class,'buy-tickets')]//div/label[text()='Card Number:']/following-sibling::input") 但我收到此错误: org.openqa.selenium.InvalidSelectorException: invalid selector: An invalid or illegal selector was specified (Session info: chrome=80.0.3987.87) For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/invalid_selector_exception.html Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: 'DESKTOP-VQ56FMV', ip: '192.168.0.13', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_231' Driver info: org.openqa.selenium.remote.RemoteWebDriver Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 80.0.3987.87, chrome: {chromedriverVersion: 80.0.3987.106 (f68069574609..., userDataDir: C:\Users\Nastya\AppData\Loc...}, goog:chromeOptions: {debuggerAddress: localhost:64958}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webdriver.remote.sessionid: 3ca3f388f2b3cf47642733a6f03...} Session ID: 3ca3f388f2b3cf47642733a6f0383c1e *** Element info: {Using=name, value=//div[contains(@class,'buy-tickets')]//div/label[text()='Card Number:']/following-sibling::input} 为什么?希望你能帮助我! 根据错误信息 Element info: {Using=name, value=//div[contains(@class,'buy-tickets')]//div/label[text()='Card Number:']/following-sibling::input} 您正在尝试使用另一个 xpath //div[contains(@class,'buy-tickets')]//div/label[text()='Card Number:']/following-sibling::input` 与By.name,无效。您需要使用By.xpath。 错误消息正在自我解释 *** 元素信息:{Using=name, value=//div[contains(@class,'buy-tickets')]//div/label[text()='卡片 编号:']/以下兄弟姐妹::输入} 您正在使用 xpath 但选择器正在使用 name driver.findElement(By.xpath("//label[contains(text(),'Card Number')]/following-sibling::input")); 看来你们很亲近。虽然您在代码中提到了定位器策略为By.name,但是您传递的值: //label[text()='Expiration Date:']//following::input[@type='tel'][1] 类似于 xpath。因此,您需要使用 By.name 而不是使用 By.xpath,并且可以使用以下任一解决方案: xpath 1使用以下: driver.findElement(By.xpath("//label[text()='Card Number:']//following::input[1]")) xpath 2使用以下兄弟: driver.findElement(By.xpath("//label[text()='Card Number:']//following-sibling::input[1]")) 因为这个选择器是XPath 您可以通过 css、xpath、名称等查找元素 更换即可 @FindBy(name = "//div[contains(@class,'buy-tickets')]//div/label[text()='Card Number:']/following-sibling::input" 与 @FindBy(xpath = "//div[contains(@class,'buy-tickets')]//div/label[text()='Card Number:']/following-sibling::input"

回答 4 投票 0

Selenium、python、findelement、Xpath 方法无法定位或单击我页面上的元素

成功登录网站后,我无法在页面上定位元素。 我的目标是单击按钮来参与提议的活动。该按钮仅出现...

回答 1 投票 0

机器人框架无法获取定位器,我尝试复制 xpath,但仍然收到“无法找到定位器”错误

这是元素 我正在尝试使用 PyCharm 工具中的 Robot 框架、selenium 来自动化应用程序。 我尝试了关键字定义来单击名为“GCC Intelligence&

回答 1 投票 0

TRIM 不适用于 PostgreSQL 中 xpath 的行和选项卡?

通过此查询 选择修剪(标题)FROM( 选择 unnest( xpath('//p[@class="secTitle1"]', xmlText )::varchar[] ) AS 标题 从 t1 ) 作为 t2 以及带有线条和空格的 XML 输入文本...

回答 2 投票 0

XPath 使用超链接获取文本(Python)

我是 XPath 的新手(总的来说,我是 Python 的相对初学者)。我试图通过它从维基百科页面的第一段中取出文本。 以 Python 页面为例...

回答 2 投票 0

XPath:点=“文本”和点逗号“文本”有什么区别

我试图理解这个 XPath 表达式之间的区别 '//按钮[包含(.,"我的文本")]' 和这个: '//按钮[包含(.="我的文本")]' 当...时有什么影响

回答 1 投票 0

Odoo 15 和 16 中的 xpath 引用,如何解决

ver.15 模板: ver.15 模板: <a role="button" t-if="website_sale_order and website_sale_order.website_order_line" class="btn btn-primary float-right d-none d-xl-inline-block" href="/shop/checkout?express=1"> <span class="">Process Checkout</span> <span class="fa fa-chevron-right" /> </a> ver.15 xpath 表达式到上面的模板,效果很好: <template id="zhen_product_cart_line_validate_button" inherit_id="website_sale.cart"> <xpath expr="//a[@href='/shop/checkout?express=1']" position="attributes"> <attribute name="t-att-style">'' if website.zhen_products_validation() else 'display:none;'</attribute> </xpath> </template> 这将打开一个模态页面。 ============================================ Odoo 提供的模块在 16 版中有变化。 ver.16 模板: <t t-set="redirect_url" t-value="'/web/login?redirect=/shop/checkout' if redirect_to_sign_in else '/shop/checkout?express=1'"/> ver.16 xpath 表达式: 我如何在版本 16 中使用 xpath 来实现此目的? 我尝试了下面,但通过 UI(应用程序)升级模块时显示错误。 <xpath expr="//t[@t-value='/shop/checkout?express=1']" position="attributes"> 错误: Element '<xpath expr="//t[@t-value=&#39;/shop/checkout?express=1&#39;]">' cannot be located in parent view 请指导解决此问题。 问候 将 redirect_url 变量设置为所需变量的一种实用方法是在第一次创建它后立即再次设置它: <xpath expr="//t[@t-set='redirect_url']" position="after"> <t t-set="redirect_url" t-value="my desired url in python expression"/> </xpath>

回答 1 投票 0

合并 xml - 将元素名称从文档 b 引入文档 a 作为属性值,匹配子文本(或位置?)

👋您好,提前感谢您的任何建议! XMLA 元数据导出 元素名称是自定义的,反映本地字段名称 元素子文本在内容、文档顺序上与 B 相同 👋您好,提前感谢您的任何建议! XML A 元数据导出a 元素名称是自定义的,反映本地字段名称 元素子文本在内容、文档顺序上与 B 相同 <metadata> <record> <Title>Untitled</Title> <Photographer>Gordon Parks</Photographer> <Notes>An important photograph because (...)</Notes> </record> ... </metadata> XML B 元数据导出b 元素名称反映了到都柏林核心元素/术语的配置映射 元素子文本在内容、文档顺序上与 A 相同 <metadata> <record> <title>Untitled</title> <creator>Gordon Parks</creator> <description>An important photograph because (...)</description> </record> ... </metadata> 所需输出 使用本地字段名称作为元素名称 将 DC 元素/项捕获为 @dc 值 <metadata> <record> <Title dc="title">Untitled</Title> <Photographer dc="creator">Gordon Parks</Photographer> <Notes dc="description">An important photograph because (...)</Notes> </record> ... </metadata> 目前的样式表 <xsl:template match="/"> <metadata> <xsl:for-each select="XML_A/metadata/record"> <record> <xsl:for-each select="node()"> <xsl:choose> <xsl:when test="name() != ''"> <!-- minor issue above: without this I believe I was selecting whitespace and/or other nodes... ...ERROR description: "Supplied element name is a zero-length string" --> <xsl:element name="{name()}"> <!-- ACK --> <xsl:value-of select="."/> </xsl:element> </xsl:when> <xsl:otherwise/> </xsl:choose> </xsl:for-each> </record> </xsl:for-each> </metadata> </xsl:template> 关于<!-- ACK --> 正如我上面所说,我相信 A 和 B 中具有相同子文本的序列节点是相同的。因此,对于 A 中每条记录的每个子节点,我认为我可以使用 either position() 或 text() 匹配B中对应的节点。但是... 我尝试实现一个键来匹配 A 和 B 之间所需的元数据/记录(给定的 ID 元素值,未在 XML A 和 B 的示例中显示,可用于匹配记录)。 <xsl:key name="match_xml_b" match="record" use="b_id"> ... <xsl:attribute name="dc" select="key('match_xml_b', a_id, document('XMLB.xml')/[text() = $a_text]/name()/> ...or... <xsl:attribute name="dc" select="key('match_xml_b', a_id, document('XMLB.xml')/[position() = $a_position]/name()/> 我认为我的语法对于选择 record 的子节点不正确,其中文本内容与 A 中当前节点的文本内容匹配(或者位置与 A 中当前节点的位置匹配)。此外,我不确定使用什么 XPath 语法来选择 B 中的元素名称,这正是我的所需输出中需要的。 我也尝试过一些没有钥匙的笨拙匹配,类似于...... <xsl:attribute name="dc" select="document('XMLB.xml')/metadata/record[b_id = a_id]/[position() = $a_position] (: how to use name() here? :)"/> or... <xsl:attribute name="dc" select="document('XMLB.xml')/metadata/record[b_id = a_id]/[text() = $a_text] (: how to use name() here? :)"/> ...不成功。 我这里的困难包括使用 record 或 position() 匹配 text() 的子元素的语法,以及检索匹配后的元素的 name。 如果允许通过匹配文本来链接元素,您可以执行类似以下操作: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:param name="xmlB" select="document('XMLB.xml')"/> <xsl:key name="keyB" match="*" use="text()" /> <xsl:template match="/metadata"> <metadata> <xsl:for-each select="record"> <record> <xsl:for-each select="*"> <xsl:copy> <xsl:attribute name="dc" select="key('keyB', text(), $xmlB)/name()"/> <xsl:apply-templates/> </xsl:copy> </xsl:for-each> </record> </xsl:for-each> </metadata> </xsl:template> </xsl:stylesheet> 这需要 XSLT 2.0 或更高版本。

回答 1 投票 0

如何展开和包围两个其他元素之间的元素

我目前正在将 MS Access 查询传输到 XML,然后使用 XSLT 3.0 将 XML 输入到 FrameMaker 中以用于发布目的。在这个过程中,我必须解析各种Access RTF文件...

回答 1 投票 0

解析缺少内容的 XML

我有一个像这样的XML: ... 我有一个像这样的XML: <?xml version="1.0" encoding="UTF-8"?> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <teiHeader> ... </teiHeader> <text> <body> <head rend="Body A">DOCUMENT_TITLE</head> <div rend="entry"> <head rend="time">TIME_1</head> <p rend="Body A"> INFORMATION A</p> <p rend="content"> <hi rend="italic"> CONTENT1 </hi> </p> </div> <div rend="entry"> <head rend="time">TIME_2</head> <p rend="Body A"> INFORMATION A</p> <p rend="Body A"> INFORMATION A</p> </div> <div rend="entry"> <head rend="time">TIME_3</head> <p rend="Body A"> INFORMATION A</p> <p rend="content"> <hi rend="italic"> CONTENT3 </hi> </p> <div rend="entry"> <p rend="Body A"> INFORMATION A</p> <p rend="content"> <hi rend="italic"> CONTENT4 </hi> </p> </div> </body> </text> </TEI> ...有许多缺少的参数,但我想获得一个 data.frame,其中每个“div”都有一行,如下所示: div 时间 内容 1 时间1 内容1 2 时间2 不适用 3 时间3 内容3 4 不适用 内容4 当参数缺失时,使用 NA。 我尝试这样的方法 data_xml <- read_xml(xmlfile) div <-xml_find_all(data_xml, xpath = ".//div") df <- tibble::tibble( date = div %>% xml_text(), content = div %>% xml_find_first('./p[@rend="content"/hi[@rend="italic"]]') %>% xml_text() ) 但是 xml_find_all 确实返回一个空列表。 根据一些建议,我尝试这种方式,实际工作 doc <- htmlParse(xmlfile) div <- getNodeSet(doc, '//div') dates<- xpathSApply(doc,'//div/text()',xmlValue) abstracts<-unlist(xpathSApply(doc,'//p[@rend="content"]//hi[@rend="italic"]',xmlValue)) 我正确地获得了我想要的字符串,但我失去了对应性,因为许多 div 没有内容或没有时间信息的头部(意味着 div、日期、摘要有不同的长度)。有什么建议么? TIA 显示的输入格式错误,因此 read_xml 会给出错误。由于问题表明它有效,因此在将 XML 移动到问题时一定存在转录错误。我们在最后的注释中的第 4 个之前添加了一个。 由于 XML 使用命名空间,因此首先使用 xml_ns_strip 去除该命名空间以避免出现问题。然后形成适当的 xpath 表达式,生成所需的节点,并将其转换为变量 中的 dcf 格式(这是一种名称:值格式,其中每个字段位于单独的行上,并且空行分隔记录 - 有关详细信息,请参阅 ?read.dcf) dcf。使用 read.dcf 读取该内容,将生成的字符矩阵转换为数据帧,修复类型并将 div 列转换为序列号。 library(dplyr) library (xml2) doc <- read_xml(Lines) # see Note at end for Lines nodes <- doc %>% xml_ns_strip() %>% xml_find_all('//div | //head[@rend="time"] | //hi[@rend="italic"]') dcf <- sapply(nodes, function(x) if (xml_name(x) == "div") "\ndiv:1" else paste0(xml_attr(x, "rend"), ":", xml_text(x)) ) dcf dcf %>% textConnection() %>% read.dcf() %>% as.data.frame() %>% type.convert(as.is = TRUE) %>% setNames(c("div", "time", "content")) %>% mutate(div = cumsum(div)) 给予 div time content 1 1 TIME_1 CONTENT1 2 2 TIME_2 <NA> 3 3 TIME_3 CONTENT3 4 4 <NA> CONTENT4

回答 1 投票 0

XSLTForms:在输出节点上设置属性? (<xf:output>)

以下输出有效(它是 以下输出有效(它是 <xf:output value="concat( instance('images')/@base_api, resource[@href=../links/resource[@rel='image']/@href]/links/resource[@rel='thumbnail']/@href)" mediatype="image/* width="64px" height="64px" /> 因此,假设我的模型中有“宽度”和“高度”属性 - 有没有办法从模型中设置属性,而不是像我这里那样硬编码为“64px”? 我还想设置“alt”属性。 我正在使用客户端XSLTForms,版本:1.2。 AVT 允许您使用 {} 在属性值中嵌入 XPath 表达式。 例如:width="{resource/image/size * 2}px"

回答 1 投票 0

使用 python playwright 获取 href 链接

我正在尝试提取 href 内的链接,但我发现它只是元素内的文本 网站代码如下: 我正在尝试提取 href 内的链接,但我发现它只是元素内的文本 网站代码如下: <div class="item-info-container "> <a href="/imovel/32600863/" role="heading" aria-level="2" class="item-link xh-highlight" title="Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga"> Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga </a> 我使用的代码是: element_handle = page.locator('//div[@class="item-info-container "]//a').all_inner_texts() 无论我是否指定//a[@href],我的输出始终是标题文本: Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga 当我真正想要实现的是: /imovel/32600863/ 我的逻辑在哪里失败了,有什么想法吗? 使用get_attribute: link = page.locator('.item-info-container ').get_by_role('link').get_attribute('href') 多个定位器: link_locators = page.locator('.item-info-container ').get_by_role('link').all() for _ in link_locators: print(_.get_attribute('href')) 只需省略 // 并使用以下 XPath-1.0 表达式: //div[@class="item-info-container "]/a/@href 这将为您提供 @href 属性的值:“/imovel/32600863/”。 整个命令可能是 element_handle = page.locator('//div[@class="item-info-container "]/a/@href').all_inner_texts() 但是表达式的结果不是元素,而是属性,所以这可能会失败。 设法通过查找所有元素,然后在处理所有元素后获取属性来做到这一点。 handleLinks = page.locator('//div[@class="item-info-container "]/a') for links in handleLinks.element_handles(): linkF = links.get_attribute('href') print(linkF) 结果将是: /imovel/32611494/ /imovel/32642523/ /imovel/32633771/ /imovel/32527162/ /imovel/30344934/ /imovel/31221488/ /imovel/32477875/ /imovel/31221480/ /imovel/32450120/ /imovel/32515628/ /imovel/32299064/

回答 3 投票 0

如何组合 2 个 xPath 查询

我正在尝试获取具有 子级且不具有 子级的所有元素节点的列表。 这两个查询...

回答 1 投票 0

错误 - webdriver.dll 中发生第一次机会异常

我在 Visual Studio 2010 中设置了一个 Selenium 项目,在调试时,我在 webdriver.dll 中第一次机会遇到异常,并附有附加信息: 找不到xpath==.//[@id='me...

回答 2 投票 0

在PostgreSQL中提取xml的值

请告诉我如何从该 XML 中提取 guid 字段?问题是 xmlns 参数的存在。目前返回空。 XML_text(col) 为 ( 选择 ' 请告诉我如何从该 XML 中提取 guid 字段?问题是 xmlns 参数的存在。目前返回空。 with XML_text(col) as ( select '<?xml version="1.0" encoding="UTF-8"?> <purchasePlan xmlns:ns2="http://zakupki.gov.ru/223fz/purchasePlan/1" xmlns="http://zakupki.gov.ru/223fz/types/1" xmlns:ns10="http://zakupki.gov.ru/223fz/decisionSuspension/1" xmlns:ns11="http://zakupki.gov.ru/223fz/disagreementProtocol/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://zakupki.gov.ru/223/integration/schema/TFF-13.1 https://zakupki.gov.ru/223/integration/schema/TFF-13.1/purchasePlan.xsd"> <body> <item> <guid>096c4bf6-d656-4441-9032-0b7c45423af1</guid> </item> </body> </purchasePlan>'::xml ) SELECT r.guid FROM XML_text as x, XMLTABLE('purchasePlan/body/item' passing x.col COLUMNS guid varchar(50) path './guid' ) as r ; 结果必须是“096c4bf6-d656-4441-9032-0b7c45423af1”。 请尝试以下解决方案。 您的 XML 有一个默认名称空间。它需要通过 xmlnamespaces(...) 子句声明并在 XPath 表达式中使用。 SQL with XML_text(col) as ( select '<?xml version="1.0" encoding="UTF-8"?> <purchasePlan xmlns:ns2="http://zakupki.gov.ru/223fz/purchasePlan/1" xmlns="http://zakupki.gov.ru/223fz/types/1" xmlns:ns10="http://zakupki.gov.ru/223fz/decisionSuspension/1" xmlns:ns11="http://zakupki.gov.ru/223fz/disagreementProtocol/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://zakupki.gov.ru/223/integration/schema/TFF-13.1 https://zakupki.gov.ru/223/integration/schema/TFF-13.1/purchasePlan.xsd"> <body> <item> <guid>096c4bf6-d656-4441-9032-0b7c45423af1</guid> </item> </body> </purchasePlan>'::xml ) SELECT r.guid FROM XML_text as x, XMLTABLE(xmlnamespaces('http://zakupki.gov.ru/223fz/types/1' AS "ns1"), '/ns1:purchasePlan/ns1:body/ns1:item' passing x.col COLUMNS guid varchar(50) path 'ns1:guid' ) as r ;

回答 1 投票 0

R 中的 XML(TEI 文档)解析:如何仅提取头部?

我必须解析与此类似的 XML-TEI 文档: ... ...

回答 1 投票 0

使用xpath有条件地选择div

我只想在条件满足/有效时选择一个div。 渲染 html 时,以下 div 可以以两种方式出现(按钮将启用/禁用)。 启用按钮状态: 我只想在条件满足/有效时选择一个div。 渲染 html 时,以下div可以以两种方式呈现(按钮将启用/禁用)。 启用按钮状态: <div class="buySellOrder_bso21ProductOption__9UpPt bodySmall cur-po buySellOrder_bso21InactiveProductOption__qrf7D contentPrimary">Intraday</div> 禁用按钮状态: <div class="buySellOrder_bso21ProductOption__9UpPt bodySmall cur-po buySellOrder_bso21InactiveProductOption__qrf7D contentPrimary buySellOrder_bso21MisDisabled__86CjY contentPrimary">Intraday</div> 我只想在启用时选择此按钮。仅当 div 包含类 buySellOrder_bso21ProductOption__9UpPt 而不是 buySellOrder_bso21MisDisabled__86CjY 时才选择它 我尝试了以下方法,但不起作用 //*[(contains(@class,"buySellOrder_bso21ProductOption__9UpPt") and not contains(@class,"buySellOrder_bso21MisDisabled__86CjY")) and contains(text(),"Intraday")] 还有其他方法吗? 我会尝试消除 @class 属性中的随机字符串并使用以下 XPath: //*[@class[contains(.,"buySellOrder") and not(contains(.,"Disabled"))] and contains(text(),"Intraday")] 说明: [@class[contains(.,"buySellOrder") and not(contains(.,"Disabled"))]: 由于我们多次使用 @class,因此将谓词放在该 @class 属性上。并像这样使用 not not()

回答 1 投票 0

如何找到购买按钮的相对xpath

我想找到购买按钮的xpath。我使用通过 Chrome 进行复制来创建路径,但它们无法在我需要它们工作的网站的每个页面上工作。 我需要一条这样的路径...

回答 1 投票 0

如何使用 XSLT 删除命名空间声明但保留 XML 中的前缀

我在某些节点上有一个带有前缀和名称空间声明的 XML,我想删除该声明但保留前缀。 当前的 XML 显示如下 我在某些节点上有一个带有前缀和命名空间声明的 XML,我想删除该声明但保留前缀。 当前的 XML 显示如下 <Body> <n1:ParentNode xmlns:n1="test1" xmlns:n2="test2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <School> <n1:SchoolInfo xmlns:n1="test1"> <SchoolID1> <n2:ID xmlns:n2="test2">BAS123</n2:ID> <SchoolID1> </n1:SchoolInfo> </School> </Body> 我希望结果如下 XML: <Body> <n1:ParentNode xmlns:n1="test1" xmlns:n2="test2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <School> <n1:SchoolInfo> <SchoolID1> <n2:ID>BAS123</n2:ID> <SchoolID1> </n1:SchoolInfo> </School> </Body> 使用 XSLT 解决该问题的最简单方法是什么?任何帮助,将不胜感激。 谢谢!! 只需使用恒等变换,多余的内部命名空间声明就会消失。

回答 1 投票 0

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