如何使用 Selenium 和 Python 从通过 xpath 找到的 webdriver 元素中提取文本

How to extract text from webdriver elements found through xpath using Selenium and Python

我有工作代码:

options_elements = issn_dropdown.find_elements_by_xpath("//ul[contains(@id,'my_id')]//li")
options = [x.text for x in options_elements]

options_elemets是5个selenium.webdriver.remote.webelement.WebElement的数组,每一个都包含text。结果 option 正是我需要的。为什么我不能将其更改为:

options = issn_dropdown.find_elements_by_xpath("//ul[contains(@id,'my_id')]//li/text()")

?测试在此行失败,没有显示任何特定错误。

text()xpath returns 文本节点中,Selenium 不支持它。您的第一个代码块就是要走的路。

你没看错。 find_elements_by_xpath("//ul[contains(@id,'my_id')]//li/text()") 使用 .

会失败

我们在以下讨论中讨论了此功能

WebDriver Specification直接指的是:

和 none 将 WebElement 引用排除在文本节点之外。


所以底线是,因为规范没有指定本地结束 APIs。客户端绑定可以自由选择对他们的语言有意义的惯用语 API。这里只介绍远端有线协议。

@Simon Stewart结论:

One option might be to serialize a Text node found via executing javascript to be treated as if it were an Element node (that is, assign it an ID and refer to it using that). Should a user attempt to interact with it in a way that doesn't make sense (sending keyboard input, for example) then an error could be returned.

因此,您的第一个选择是要走的路:

options_elements = issn_dropdown.find_elements_by_xpath("//ul[contains(@id,'my_id')]//li")
options = [x.text for x in options_elements]