python-3.x - python selenium find_elements 输出不正确
问题描述
我是 python+selenium 的新手。我正在尝试使用 find_elements* 函数返回一些东西 - 请参见下面的代码。当我询问列表的长度时,我可以看到项目的数量是正确的,但是当我打印元素的内容时,我可以看到每个元素包含相同的值并且应该包含不同的值。
elems = browser.find_elements_by_xpath("//div[@class='some_class_name')]")
print(len(elems)) # returns correct number of items
for elem in elems:
print(elem.find_element_by_xpath("//span[@class='another_class_name']").text)
print(elem.find_element_by_xpath("//div[starts-with(@href, 'https://some_web_page_name.com/')]").get_attribute(
'data'))
print(elem.find_element_by_xpath("//div[@class='other_class_name']").text)
解决方案
您应该使用.
将 xpath 的范围缩小到当前元素的子/孙元素。在您的情况下,XPath 指向页面上的第一个元素,而不是在当前elem
更改代码下找到,如下所示
for elem in elems:
print(elem.find_element_by_xpath(".//span[@class='another_class_name']").text)
print(elem.find_element_by_xpath(".//div[starts-with(@href, 'https://some_web_page_name.com/')]").get_attribute(
'data'))
print(elem.find_element_by_xpath(".//div[@class='other_class_name']").text)
推荐阅读
- php - 使用搜索文本框加载更多结果
- react-native - 如何在 react-native 中正确使用 flex?
- android - EditText 未显示,在底部工作表对话框中输入文本
- java - 过滤器中的自定义 propertyConverter 在 Neo4j OGM 中被覆盖
- c++ - 复合错误代码?
- azure - 无法自动检测应用的运行时堆栈 - Azure webapp up
- python - Python:为什么这个列表理解比等效的 for 循环慢 5000 倍?
- git - 我最近的提交工作。我当前的工作集有一个错误。如何找出导致错误的更改?
- c++ - 面向数据的设计;如何优化 C++ 中的数据结构以提高性能?
- ios - SKReceiptRefreshRequest 每次都询问密码