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

使用Selenium与BeautifulSoup爬取三家银行汇率表仅获取HTML元素无文本内容的技术求助

解决Selenium爬取银行汇率表仅获取HTML结构无文本内容的问题

你遇到的这个问题在爬取现代动态网站时很常见——很多银行网站会用JavaScript异步加载汇率数据,仅仅靠implicitly_wait(10)不一定能确保数据完全渲染到页面中。下面我帮你一步步排查和解决:

核心原因分析

隐式等待implicitly_wait只是告诉Selenium在找不到元素时最多等待指定时间,但它不会等待动态加载的数据填充到表格。当你调用driver.page_source时,可能表格的HTML结构已经生成,但数据还没从后端接口加载完成,所以只能拿到空的表格壳子。

解决方案1:改用显式等待(确保数据加载完成)

显式等待可以指定等待某个具体条件满足(比如表格出现数据行),这能保证你获取页面源码时,数据已经渲染完成。修改后的代码示例:

import requests
from bs4 import BeautifulSoup
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

PATH = r'C:\Users\xxxxxx\AppData\Local\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://www.erstebank.hr/hr/tecajna-lista')

try:
    # 等待表格的tbody出现,并且里面至少有一行数据(根据网站实际结构调整选择器)
    WebDriverWait(driver, 20).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'tbody tr'))
    )
finally:
    # 此时再获取页面源码,就能拿到带数据的表格
    soup = BeautifulSoup(driver.page_source, 'lxml')
    tables = soup.find_all('table')
    
    # 遍历表格并打印文本内容
    for idx, table in enumerate(tables):
        print(f"=== 表格 {idx+1} 内容 ===")
        print(table.get_text(strip=True, separator='\n'))
    
    driver.close()

其他可能的排查方向

1. 检查页面是否包含iframe

部分网站会把汇率表格放在iframe中,这时候你需要先切换到iframe才能获取内容:

# 先找到对应的iframe(需要查看页面源码确认iframe的id/name/选择器)
iframe = driver.find_element(By.ID, 'rate-frame')
driver.switch_to.frame(iframe)

# 之后再执行显式等待和爬取操作

2. 应对反爬机制

银行网站可能会检测自动化工具,你可以给Chrome添加模拟浏览器的参数,避免被识别:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")

driver = webdriver.Chrome(PATH, options=chrome_options)

3. 直接抓取API接口(更高效)

打开浏览器开发者工具的「Network」标签,刷新页面后查看XHR/fetch请求,你会发现很多银行会用API接口返回JSON格式的汇率数据。直接用requests请求这个接口,比用Selenium更高效,也避免了动态渲染的问题。

针对三个网站的通用建议

每个银行网站的页面结构不同,你需要分别检查:

  • 对于Erste Bank:确认表格是否在iframe中,或者调整显式等待的元素选择器
  • 对于OTP Bank:查看表格的CSS类/id,针对性设置等待条件
  • 对于Sber Bank:检查是否有动态加载的API接口,优先考虑直接请求接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:28:10