如何通过Fidelity筛选器获取当前股票价格?代码报错求助
解决Fidelity股票价格抓取问题
一、分析requests+BeautifulSoup方案的错误
- 元素未找到的核心原因:Fidelity报价页面依赖JavaScript动态渲染内容,
requests.get()仅能获取初始静态HTML,此时目标元素<div class="nre-quick-quote-price">还未被渲染,导致soup.find()返回None,后续下标访问触发TypeError。 - 属性访问错误:即使找到目标div,它也不存在
value属性,价格实际存储在div的文本内容中,需用.text获取而非['value']。
二、分析Selenium方案的错误
- 定位器格式错误:Selenium 4及以上版本中,
find_element()需明确指定定位方式(如By.CSS_SELECTOR),不能直接传入CSS选择器字符串,否则触发InvalidArgumentException。 - 缺少等待机制:页面加载需要时间,直接调用
find_element()可能在元素未渲染完成时执行,导致元素查找失败。
三、修正后的Selenium代码
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 def stock_price(symbol: str = "AAPL") -> str: driver = webdriver.Chrome() url = f"https://digital.fidelity.com/prgw/digital/research/quote/dashboard/summary?symbol={symbol}" driver.get(url) # 等待元素加载完成,最长等待10秒 current_price = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "div.nre-quick-quote-price")) ).text driver.quit() # 关闭浏览器进程 return current_price # 测试调用 print(f"AAPL 当前价格: {stock_price('AAPL')}")
四、补充说明
- 动态页面场景下,Selenium是最直接的解决方案;若想避免使用浏览器驱动,可尝试查找Fidelity官方开放的API(需注意权限限制)。
- 频繁抓取可能触发网站反爬机制,建议添加合理的请求间隔。
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

