selenium 使用 xpath 获取以下的 h4 元素文本并进行历遍点击。
但xpath定位时一直只能定位到第一个元素内容,不能形成列表进行历遍。
xml 示例文件
...
<div id="floor-user-profile_485">
<h1>
<h2>
<h3>
<h4>1</h4>
</h3>
<h3>
<h4>2</h4>
</h3>
<h3>
<h4>3</h4>
</h3>
<h3>
<h4>4</h4>
</h3>
<h3>
<h4>5</h4>
</h3>
<h2>
<h1>
</div>
...
在浏览器控制台使用 ‘//*[@id=“floor-user-profile_485”]//h4’ 可以定位到所需的多个文本,但在 selenium 中定位只能定位到首个元素。
print(test.find_element_by_xpath('//*[@id="floor-user-profile_485"]//h4'))
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9f1e16ca-ce27-46db-897b-269a5fefaca2", element="d3a726d2-b993-4511-8917-bd804667d690")>
原因: find_element_by_xpath() 定位的是单个元素或是首个元素,如需定位多个元素以形成列表用作后续的处理操作,需要使用 find_elements_by_xpath() 。
ltext = test.find_elements_by_xpath('//*[@id="floor-user-profile_485"]//h4')
print("xpath values is ",ltext)
lists = []
for i in ltext:
a = i.text
i.click()
lists.append(a)
time.sleep(1)
print(lists)
输出
xpath values is [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9f1e16ca-ce27-46db-897b-269a5fefaca2", element="d3a726d2-b993-4511-8917-b
d804667d690")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9f1e16ca-ce27-46db-897b-269a5fefaca2", element="bdc8c928-2de4-4252-96c9-daa
d07894c96")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9f1e16ca-ce27-46db-897b-269a5fefaca2", element="7a0337c9-217e-4807-955d-5f7b9
5bb5109")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9f1e16ca-ce27-46db-897b-269a5fefaca2", element="93c79b05-435b-4715-b9df-b71dbcb
17617")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9f1e16ca-ce27-46db-897b-269a5fefaca2", element="db9f07a2-f30e-497d-b623-3004e76c6
0e5")>
['1','2','3','4','5']