【问题标题】:How to print text (by its class name) in selenium, python?如何在 selenium,python 中打印文本(按其类名)?
【发布时间】:2021-12-11 03:45:33
【问题描述】:

我有这个代码:

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()

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

网站上的元素代码如下:

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

【问题讨论】:

标签: python html css selenium


【解决方案1】:

您正试图通过错误的定位器定位该元素。
所需元素的class 属性值为Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib),它不是id 属性。
因此,您应该使用By.CSS_SELECTOR,而不是By.ID,。
你也应该使用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()

【讨论】:

  • 完美运行,谢谢!我正在尝试 CSS_SELECTOR 但不知道我必须使用可见性而不是存在。这是为什么呢?
  • 有一个创建过程,在页面加载的同时渲染页面上的元素。因此,当元素最初出现在页面上时,存在,它仍然没有最终完成,将不可点击并且仍然不包括它将最终包含的文本。因此,presence_of_element_located 捕获并返回页面上存在的元素,但可能还没有最终准备好,而visibility_of_element_located 在更成熟的阶段检测到元素可见并且在大多数情况下最终完成。
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 2019-08-03
  • 2021-12-31
  • 1970-01-01
  • 2020-04-16
  • 2022-08-16
  • 1970-01-01
相关资源
最近更新 更多