XPATH 找不到 Web 上包含的文本 - 使用 contains(text())

在这个网站上https://classicdb.ch/?quest=788


我试过:


driver.find_element_by_xpath(

                "//div[contains(text(), 'Start')]").text

它找到元素并返回


'Start: Kaltunk'

但是,当我尝试查找包含“End”的元素时,它什么也找不到。


driver.find_element_by_xpath(

                "//div[contains(text(), 'End')]").text

为什么是这样?


largeQ
浏览 314回答 1
1回答

浮云间

尝试使用以下 xpath。//table//div[contains(.,'End:')]截屏:说明:编辑 1首先让我们看看text()target 下有多少个节点div。所以 div 有 3 个文本节点。让我详细说明 OP 使用的原始 xpath。//div[contains(text(), 'End')] ^div present anywhere in the document     ^which contains               ^the **first** text() node with string value as `End`当contains()作为它的第一个参数(在div[argument]中)给出时,它采用第一个节点的字符串值,但出现在第二个文本节点中,而不是第一个。这就是 xpath 不起作用的原因。End我们有 2 个选项来处理这个问题。1) 使用 text() 作为第一个参数- 通过这种方式,它将获取当前上下文下的所有文本节点,然后contains()用作条件来检查text()将匹配其值包含的任何 text() 节点的值End,如下所示。//div[text()[contains(., 'End')]]^div present any where in the document     ^which have text() node             ^ that contains 'End`检查以下屏幕截图:到这个时候,你会问为什么//div[contains(text(), 'Start')]OP 使用的第一个 xpath ( ) 有效?如果您查看 div 中关联的 text() 节点,Start文本存在于第一个 text() 节点本身中,这就是他能够使用该 xpath 的原因。2)使用。检查当前节点上下文简单来说,当您说.它将检查整个当前元素上下文的End.//div[contains(.,'End')]如果您不将 scopt 限制为//table(在 xpath 的开头),您将获得 5 个 div,因为原始 div 的祖先 div 具有此文本也与 xpath 匹配。所以限制在表格中检查的范围,比如`//table//div[contains(.,'End')]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python