Python XPath,以X开头,以零或最低数字结尾
如果有人能帮我编写一个XPath来实现以下目标,我将不胜感激:Python XPath,以X开头,以零或最低数字结尾,python,xpath,Python,Xpath,如果有人能帮我编写一个XPath来实现以下目标,我将不胜感激: 查找具有以下id的元素:“revit_form_Button_50”,其中数字不断变化(可能是30/40,但页面上的第一个似乎总是以0结尾),并且标题为“每日技术总计/每日技术总计/员工每日总计报告” 或者查找如下元素:'revit_form_Button'+'mininumnumber',并具有平铺:“每日技术总计/每日技术总计/员工每日总计报告” 任何方法都会帮我大忙 我的前两次尝试都失败了: browser.find_el
- 查找具有以下id的元素:“revit_form_Button_50”,其中数字不断变化(可能是30/40,但页面上的第一个似乎总是以0结尾),并且标题为“每日技术总计/每日技术总计/员工每日总计报告”
- 或者查找如下元素:'revit_form_Button'+'mininumnumber',并具有平铺:“每日技术总计/每日技术总计/员工每日总计报告”
browser.find_element_by_xpath("//*[starts-with(@id,'revit_form_Button_' ) and ends-with(@id,'0')]").click()
browser.find_element_by_xpath("//*[boolean(number(substring-before(substring-after(@id, 'revit_form_Button_'), '0')))]").click()
每日技术总计/每日技术总计/员工每日总计报告
每日技术总计/每日技术总计/员工每日总计报告
中没有以结尾的,但您可以使用
"//*[starts-with(@id,'revit_form_Button_' ) and substring(@id,string-length(@id)) = '0']"
满足附加条件
还有标题“每日技术总计/每日技术总计/员工每日总计报告”
添加一个类似
child::*[text() = 'full content of the child element here']
或
到您的XPath。在您的示例中,子元素是
。因此,您也可以编写child::b
而不是child::*
总而言之:
"//*[starts-with(@id,'revit_form_Button_')
and substring(@id,string-length(@id)) = '0'
and child::*[text() = 'Daily Tech Totals / Daily Tech Totals / Employee Daily Totals Report']
]"
这是一个XPath表达式。为了便于阅读,可以分成几行,但也可以是一行。第二行应该可以。您可以共享异常吗?第二个XPath也会找到revit_form_Button_401
Yes,但不太清楚可能的数字范围是什么,以及OP所说的“失败的尝试”是什么意思无法找到XPath表达式为//*[以(@id,'revit_form_Button_')开头,以(@id,'0')结尾]由于以下错误:SyntaxError:未能对“文档”执行“评估”:字符串“/*[以(@id,'revit_form_Button_')开头,以(@id,'0')]”结尾]不是有效的XPath表达式。@iCosmin,实际上,find_element_by_XPath(/*[以(@id,'revit_form_Button_')开头])”)。单击()
将始终单击DOM中的first found按钮,因此如果您需要选择第一个按钮-您不需要额外的谓词,我只尝试了第一部分,没有附加条件,我得到了以下结果:selenium.common.exceptions.ElementNotVisibleException:Message:element不可交互
。如果我使用完整的一个是无效的<代码>语法错误:未能对“文档”执行“评估”:字符串“/*[以(@id,'revit_form_Button')开头,子字符串(@id,字符串长度(@id))='0',子字符串:*[text()='Daily Tech Totals/Daily Tech Totals/Employee Daily Totals Report']'不是有效的XPath表达式。
感谢您的时间和帮助!元素不可交互
看起来您不允许单击该
。该应该与selenium相关,而不是与XPath相关。对于第二个问题,您缺少一个结束语]
。此表达式中有两个嵌套谓词,它们都需要关闭。请参阅我的示例的第三行和最后一行的末尾。感谢您帮助我了解如何创建XPath。但是,在我将所有内容放在一起之后,它仍然找不到元素:selenium.common.exceptions.NoSuchElementException:Message:没有这样的元素:找不到元素:{“方法”:“xpath”,“选择器”:“/*[以(@id,'revit\u form\u Button')和子字符串(@id,字符串长度(@id))=“0”和子字符串:*[text()='Daily Tech Totals/Daily Tech Totals/Employee Daily Totals Report']]“}
你能编辑你的答案吗,这样我就可以接受它了吗?如果我删除这个部分和子字符串(@id,字符串长度(@id))='0'
。不知道为什么它不喜欢第二个论点。我感谢你的支持!在XPath中,子字符串索引是基于1的,因此,string length(s)
索引字符串的最后一个字符s
。这肯定会奏效。我尝试将XPath作为独立XML转换(XSLT)的一部分,使用COTS工具(实际上是XmlSpy,但现在我检查了free以成功地处理它)。我确信这些实现符合标准。Python的lxml中的实现也应该如此,但谁知道呢?
child::*[contains(text(),'text to match here')]
"//*[starts-with(@id,'revit_form_Button_')
and substring(@id,string-length(@id)) = '0'
and child::*[text() = 'Daily Tech Totals / Daily Tech Totals / Employee Daily Totals Report']
]"