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

Python Selenium获取网页iframe内Bid与Ask价格方法求助

解决JMBullion白银价格Bid/Ask获取问题

原代码问题分析

你的代码存在两个核心错误:

  • 错误调用switch_to.frame():find_elements(By.CLASS_NAME, 'price')返回的是页面普通价格元素列表,并非iframe元素,强行切换会直接报错。
  • 未等待页面加载完成:直接获取元素会因页面未渲染完毕导致找不到目标内容。

正确实现代码

使用显式等待确保元素加载完成,通过XPath精确定位Bid和Ask价格:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器
driver = webdriver.Edge()
driver.get('https://www.jmbullion.com/charts/silver-prices/')

try:
    # 显式等待页面关键元素加载,最长等待10秒
    wait = WebDriverWait(driver, 10)
    
    # 定位Bid价格元素
    bid_price = wait.until(EC.presence_of_element_located(
        (By.XPATH, "//div[contains(text(), 'Bid')]/following-sibling::div[@class='price']")
    )).text
    
    # 定位Ask价格元素
    ask_price = wait.until(EC.presence_of_element_located(
        (By.XPATH, "//div[contains(text(), 'Ask')]/following-sibling::div[@class='price']")
    )).text
    
    # 打印结果
    print(f"白银买入价(Bid): {bid_price}")
    print(f"白银卖出价(Ask): {ask_price}")
finally:
    # 关闭浏览器
    driver.quit()

代码说明

  • 显式等待:用WebDriverWait替代直接获取元素,确保元素在页面渲染完成后再定位,避免加载延迟导致的元素未找到问题。
  • XPath定位:通过文本内容关联Bid/Ask标签与对应价格元素,保证定位准确性,适配页面小范围布局变动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:55:05