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
相关产品推荐
相关产品推荐

