如何使用 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()")
使用 .
会失败
我们在以下讨论中讨论了此功能
- Treatment of DOM Text Nodes in mixed content nodes
- Enhancement request: access to text nodes
- Add support for interacting with text nodes
WebDriver Specification直接指的是:
和 none 将 WebElement 引用排除在文本节点之外。
所以底线是,因为规范没有指定本地结束 APIs。客户端绑定可以自由选择对他们的语言有意义的惯用语 API。这里只介绍远端有线协议。
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]
我有工作代码:
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()")
使用
我们在以下讨论中讨论了此功能
- Treatment of DOM Text Nodes in mixed content nodes
- Enhancement request: access to text nodes
- Add support for interacting with text nodes
WebDriver Specification直接指的是:
和 none 将 WebElement 引用排除在文本节点之外。
所以底线是,因为规范没有指定本地结束 APIs。客户端绑定可以自由选择对他们的语言有意义的惯用语 API。这里只介绍远端有线协议。
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]