Python爬取网站iframe动态表格数据时出现AttributeError如何解决
问题原因
- 代码核心问题是混用了
requests和Selenium,requests只能获取页面原始静态HTML,无法拿到JS动态渲染的内容,更获取不到iframe内的嵌套数据,所以soup.find返回None,调用find方法自然抛出属性错误。 - 你已经启动了Selenium浏览器实例,完全可以直接用Selenium获取渲染后的完整页面内容,不需要额外发送requests请求。
- 目标表格在iframe嵌套页中,需要先切换到对应iframe才能定位到元素。
修正后可用代码
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 from bs4 import BeautifulSoup import time # 初始化浏览器 browser = webdriver.Chrome('C://Python38/chromedriver') browser.get("https://poocoin.app/rugcheck/0xe56842ed550ff2794f010738554db45e60730371/top-holders") # 等待页面基础资源加载 time.sleep(3) # 切换到内容所在的iframe iframe = browser.find_element(By.TAG_NAME, 'iframe') browser.switch_to.frame(iframe) # 等待表格加载完成,避免提前定位报错 WebDriverWait(browser, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'table.table.table-bordered.table-condensed.text-small')) ) # 直接获取Selenium渲染完成的页面源码解析 page_source = browser.page_source soup = BeautifulSoup(page_source, 'lxml') t = soup.find('table', class_='table table-bordered table-condensed text-small') trs = t.find('tbody').find_all('tr') for tr in trs[:10]: print(list(tr.stripped_strings)) # 操作完成切回默认文档,关闭浏览器 browser.switch_to.default_content() browser.quit()
改动说明
- 移除了无效的
requests请求,直接用Selenium渲染后的页面源码做解析 - 新增iframe切换逻辑,保证能定位到嵌套页内的表格元素
- 增加显式等待逻辑,避免页面还没加载完成就定位元素导致的报错
- 补充iframe切回的规范操作,避免后续扩展功能时出现上下文错误
内容的提问来源于stack exchange,提问作者rbutrnz
相关产品推荐
相关产品推荐

