You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用Selenium如何通过类名定位元素并打印文本?

问题核心原因
  • 第一个错误是定位方式匹配错误:你使用By.ID去查找元素,但你传入的"Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"是目标元素的class属性值,并非id属性值,目标元素本身没有设置id属性,自然无法通过ID定位到。
  • 第二个错误是类名定位规则误用:就算你把定位方式改成By.CLASS_NAME也无法成功,因为By.CLASS_NAME只支持传入单个类名,你传入的是多个类名用空格拼接的字符串,不符合规则。
修正方案

推荐用By.CSS_SELECTOR匹配多个类名,类名前加.,空格分隔不同类即可,修正后的代码如下:

try:
    # 把By.ID改成By.CSS_SELECTOR,特殊字符括号加反斜杠转义
    price = wait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".Trsdu\\(0.3s\\).Fw\\(b\\).Fz\\(36px\\).Mb\\(-4px\\).D\\(ib\\)"))).text
    print(price)
except Exception:
    print("element not found")
finally:
    driver.quit()

也可以改用XPATH定位,写法如下:

price = wait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//span[@class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"]'))).text
其他排查点

如果修改后仍然定位失败,可以按以下顺序排查:

  • 把等待条件换成EC.visibility_of_element_located代替presence_of_element_located,确保元素完全渲染可见后再取值,适配雅虎财经的动态加载逻辑
  • 确认页面没有iframe嵌套,如果目标元素在iframe内,需要先调用driver.switch_to.frame()切换到对应iframe再执行定位
  • 检查是否触发了反爬验证页面,导致实际返回的页面结构和预期不一致

内容的提问来源于stack exchange,提问作者ubant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:06:07