首页 > 解决方案 > 如何在 selenium,python 中打印文本(按其类名)?

问题描述

我有这个代码:

try:
    price = wait(driver, 10).until(EC.presence_of_element_located((By.ID, "Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"))).text
    print(price)
except Exception:
    print("element not found")
finally:
    driver.quit()

我想要它做的是复制雅虎上的股票价格并在终端上打印。我在想,它可能不起作用,因为股票价格正在变化,班级或其他东西也在变化,但是在尝试复制一个不动的元素之后,它仍然不起作用。我究竟做错了什么?

网站上的 element 代码如下所示:

<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="31">41.24</span>

标签: pythonhtmlcssselenium

解决方案


您正试图通过错误的定位器定位该元素。
所需元素的class属性值为Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib),它不是id属性。
因此,By.ID,您应该宁愿使用By.CSS_SELECTOR.
你也应该使用visibility_of_element_located而不是presence_of_element_located.
请试试这个:

try:
    price = wait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.Trsdu(0.3s).Fw(b).Fz(36px).Mb(-4px).D(ib)"))).text
    print(price)
except Exception:
    print("element not found")
finally:
    driver.quit()

或这个:

try:
    price = wait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span[data-reactid="31"]"))).text
    print(price)
except Exception:
    print("element not found")
finally:
    driver.quit()

推荐阅读