Python Selenium:通过 XPath 查找元素,问题

Python Selenium: Find Element by XPath,   issue

能否请您帮我解决以下问题:

我正在尝试使用 Selenium Diver 通过 XPath 识别网页上的各种元素。尽管我已经阅读了一些关于此的问题,但我无法通过“ ”来解决我的问题。

根据网页代码,这是元素的文本,我用它来查找元素:

DISCUSSION AND ANALYSIS 

这是 我的 X-Path,目前还不能正常工作(我收到一条错误消息):

elements = driver.find_elements_by_xpath("//*[contains(normalize-space(translate(//data, ' ', ' '))), 'DISCUSSION AND ANALYSIS')]")

非常感谢!

最简单的方法是从您的 xpath 表达式中删除

使用这个 xpath

elements = driver.find_elements_by_xpath("//*[contains(text(),'DISCUSSION')]")

elements = driver.find_elements_by_xpath("//*[contains(text(),'AND ANALYSIS')]")

元素文本为:

DISCUSSION AND ANALYSIS

要通过文本定位元素,您可以使用以下 based :

  • 使用text():

    "//*[text()='DISCUSSION\u00A0AND ANALYSIS']"
    
  • 使用contains():

    "//*[contains(., 'DISCUSSION\u00A0AND ANALYSIS')]"
    

但是,理想情况下,您可能希望避免 NO-BREAK SPACE 字符并使用以下任一解决方案:

  • 使用starts-with():

    "//*[starts-with(., 'DISCUSSION')]"
    
  • 使用contains():

    "//*[contains(., 'AND ANALYSIS')]"
    
  • 使用 starts-with()contains():

    "//*[starts-with(., 'DISCUSSION') and contains(., 'AND ANALYSIS')]"
    

参考

您可以在以下位置找到相关的详细讨论:

  • Using XPATH to search text containing  

tl;博士

Unicode Character 'NO-BREAK SPACE' (U+00A0)

你的提议

//*[contains(normalize-space(translate(//data, ' ', ' '))), 'DISCUSSION AND ANALYSIS')]
如果将 //data 替换为 .

会起作用。这里的//data完全没有意义。

您可能还想使用“=”测试而不是“包含”测试,并在开始时使用 //data 而不是 //*——但这一切都取决于什么else 可能出现在文档中导致错误匹配。

真的没有必要将 NBSP 翻译成 SP;您可以只在要测试的字符串中包含一个 NBSP。但同样,这取决于您认为测试文档中可能出现的可能变化。