Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XPath,以X开头,以零或最低数字结尾_Python_Xpath - Fatal编程技术网

Python XPath,以X开头,以零或最低数字结尾

Python XPath,以X开头,以零或最低数字结尾,python,xpath,Python,Xpath,如果有人能帮我编写一个XPath来实现以下目标,我将不胜感激: 查找具有以下id的元素:“revit_form_Button_50”,其中数字不断变化(可能是30/40,但页面上的第一个似乎总是以0结尾),并且标题为“每日技术总计/每日技术总计/员工每日总计报告” 或者查找如下元素:'revit_form_Button'+'mininumnumber',并具有平铺:“每日技术总计/每日技术总计/员工每日总计报告” 任何方法都会帮我大忙 我的前两次尝试都失败了: browser.find_el

如果有人能帮我编写一个XPath来实现以下目标,我将不胜感激:

  • 查找具有以下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']
]"