【问题标题】:Getting text? from full xpath quick question获取文本?来自完整的 xpath 快速问题
【发布时间】:2021-02-12 09:42:09
【问题描述】:

在编程方面相对较新,使用 Selenium 和 Xpath 编写 Python

来自这个网站:https://www.marketbeat.com/stocks/NASDAQ/AMZN/earnings/

我想做的是复制过去收入的日期。

问题是它在表格中并且它也有标签。

我有这个完整的 Xpath:

/html/body/div[1]/main/article/form/div[8]/div[2]/div[2]/div/div[5]/div/table/tbody/tr[2 ]/td[1]

经过检查,它显示了这一点

< td data-sort-value="20201027000000">10/27/2020 < / td >

我正在尝试从这里获取10/27/2020,但我不知道该怎么做。

当它只是 &lt; td &gt;$1.53&lt; /td &gt; 时很容易,只需提供完整的 xpath,然后在其上执行 .text 即可得到文本。

重点是我如何获得10/27/2020。我怀疑我将不得不检查 data-sort-value="" 部分。

这是我所拥有的:

stringeEPSxpath = """/html/body/div[1]/main/article/form/div[8]/div[2]/div[2]/div/div[5]/div/table/tbody/tr[""" + row + """]/td[1]"""

Date = stringeEPSxpath.text

(行部分只是我通过循环迭代网站页面没有问题。)

对于我的其余代码,它非常简单:

stringeEPSxpath = """/html/body/div[1]/main/article/form/div[8]/div[2]/div[2]/div/div[5]/div/table/tbody/tr[""" + row + """]/td[3]"""
    stringEPSxpath = """/html/body/div[1]/main/article/form/div[8]/div[2]/div[2]/div/div[5]/div/table/tbody/tr[""" + row + """]/td[4]"""

    elem = driver.find_element_by_xpath(stringeEPSxpath)
    elem2 = driver.find_element_by_xpath(stringEPSxpath)

    fix1 = (elem.text).replace(')','')
    fix2 = (elem2.text).replace(')','')

    eps1 = fix1.replace('(','-')
    eps2 = fix2.replace('(','-')

正如您在上面看到的,我所要做的就是为其设置一个变量,然后使用 .text 将其转换为字符串。但现在这不适用于日期。

最终结果是AttributeError: 'str' object has no attribute 'text' 的错误,我怀疑这是因为data-sort-value="20201027000000" 部分。

【问题讨论】:

  • 您可以编辑您的问题并发布网址吗?
  • marketbeat.com/stocks/NASDAQ/PYPL/earnings 不是同一个股票(另一个是 AMZN),但格式完全相同
  • 等等,没关系,我找到了原因,我忘了写一行代码让它真正工作。感谢您的回复,它让我再次解决了这个问题。

标签: python xpath


【解决方案1】:

在这段代码中,stringeEPSxpath 是字符串,而不是 WebElement。

stringeEPSxpath = """/html/body/div[1]/main/article/form/div[8]/div[2]/div[2]/div/div[5]/div/table/tbody/tr[""" + row + """]/td[1]"""

Date = stringeEPSxpath.text

你可以试试这个:

from selenium.webdriver.common.by import By

element = driver.find_element(By.XPATH,"//td[@data-sort-value='20201027000000']")
Date = element.text

【讨论】:

  • 有没有办法迭代你的方法?有没有办法对数据排序值部分进行排序。因为'20201027000000'部分是我想要找到的。
  • 没关系,我忘记了一行代码 (driver.find_elementbyxppath),它实际上使事情正常工作,谢谢。
  • 此代码将检查一个元素。 element = driver.find_element(By.XPATH,"//td[contains(@data-sort-value,'20201027000000')]") 您可以通过将 find_element 更改为 find_elements 找到 td 的元素列表 contains @data-sort-value .
【解决方案2】:

忘记了实际上使用 xpath 的 driver.find_element_by_xpath(stringeEPSxpath)。由于我从其他程序中复制并粘贴,我想我删除了太多,完全忘记添加 driver.findxpath。

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多