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
要通过文本定位元素,您可以使用以下 xpath 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;博士
你的提议
//*[contains(normalize-space(translate(//data, ' ', ' '))), 'DISCUSSION AND ANALYSIS')]
如果将 //data
替换为 .
, 会起作用。这里的//data
完全没有意义。
您可能还想使用“=”测试而不是“包含”测试,并在开始时使用 //data
而不是 //*
——但这一切都取决于什么else 可能出现在文档中导致错误匹配。
真的没有必要将 NBSP 翻译成 SP;您可以只在要测试的字符串中包含一个 NBSP。但同样,这取决于您认为测试文档中可能出现的可能变化。
能否请您帮我解决以下问题:
我正在尝试使用 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
要通过文本定位元素,您可以使用以下 xpath 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;博士
你的提议
//*[contains(normalize-space(translate(//data, ' ', ' '))), 'DISCUSSION AND ANALYSIS')]
如果将 //data
替换为 .
, 会起作用。这里的//data
完全没有意义。
您可能还想使用“=”测试而不是“包含”测试,并在开始时使用 //data
而不是 //*
——但这一切都取决于什么else 可能出现在文档中导致错误匹配。
真的没有必要将 NBSP 翻译成 SP;您可以只在要测试的字符串中包含一个 NBSP。但同样,这取决于您认为测试文档中可能出现的可能变化。