【问题标题】:Getting List of Elements by XPath in Selenium在 Selenium 中通过 XPath 获取元素列表
【发布时间】:2017-07-13 00:22:05
【问题描述】:

我正在尝试使用 Selenium 和 Python 自动化我的每月费用报告流程。我可以登录并导航到费用、日期和地点列表。我无法将它们保存到 Python 中的列表中。目前,我一直在保存日期。

我拥有 XPath 权限。当在页面上输入 Chrome 控制台时,它会显示所需日期的每个实例。但是尝试将它们保存到 Python 中的变量似乎不起作用。调试时,“日期”列表的长度为 0。

time.sleep(4)
dates = driver.find_elements_by_xpath('//time')
print(dates)

这是 HTML:

< time datetime="2017-07-11T05:00:00.000Z">07/11/2017</time>

我正在尝试从每个实例中删除“07/11/2017”。在 Chrome 控制台中使用“//time”xpath 会拉出一个包含 25 个元素的列表,这是准确的。我只是不知道为什么日期列表最终为空。我想我误解了 find_elements_by_xpath 函数的工作原理。任何建议将不胜感激。

【问题讨论】:

  • 如何将sleep 替换为WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.XPATH, "//time")))
  • 为什么你认为列表是空的?如果你这样做print(len(dates))会发生什么?
  • 顺便说一句,时间标签是在 iframe 的任何框架内吗?
  • 当我尝试按下按钮时,@GaurangShah WebDriverWait 无法正常工作(该网站的特定按钮对象很奇怪)。使用基本驱动程序是我让它工作的唯一方法。
  • @Guy 它返回 0。我之前在我的 IDE 中使用调试功能发现了这一点

标签: python selenium xpath


【解决方案1】:

希望对您有所帮助。如果您需要进一步的帮助,请告诉我。选择哪个选项可以达到目的。

选项 1:

time.sleep(4)
dates = driver.find_elements_by_xpath('//time')
for date in dates:
    print(date.text)

选项 2:

time.sleep(4)
dates = driver.find_elements_by_xpath('//time')
print(dates.get_attribute('datatime'))
for date in dates:
    print(date.text)

【讨论】:

  • 在您的两个示例中,dates 都是列表,因此它不能具有 textget_attribute 函数。
猜你喜欢
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
相关资源
最近更新 更多