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

如何用Selenium抓取含嵌入式JavaScript的网页内容?

解决Selenium抓取JS渲染+iframe页面内容的问题

原脚本的核心问题

  1. visibility_of_all_elements_located返回的是元素列表,不能直接调用get_attribute
  2. 2秒等待时间过短,iframe及内部内容大概率还未加载完成
  3. 目标内容嵌套在iframe中,未切换iframe之前无法定位到内部元素

修正后的可运行脚本

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait


class Demo():
    def demo_get_contents(self):
        # 初始化Chrome浏览器
        service = Service(executable_path=ChromeDriverManager().install())
        driver = webdriver.Chrome(service=service)
        driver.get('https://gloss.dliflc.edu/LessonViewer.aspx?lessonId=26143&lessonName=ger_soc434&linkTypeId=0')
        
        try:
            # 等待目标iframe加载完成并切换上下文
            iframe = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.ID, 'contentFrame'))
            )
            driver.switch_to.frame(iframe)
            
            # 抓取Overview模块内容
            overview_element = WebDriverWait(driver, 10).until(
                EC.visibility_of_element_located((By.CLASS_NAME, 'gloss_Overview'))
            )
            print("Overview内容:\n", overview_element.text)
            
            # 抓取标题"Auf dem Bahnhof"
            title_element = WebDriverWait(driver, 10).until(
                EC.visibility_of_element_located((By.TAG_NAME, 'h1'))
            )
            print("\n标题:", title_element.text)
            
            # 抓取Objective模块内容
            objective_element = WebDriverWait(driver, 10).until(
                EC.visibility_of_element_located((By.CLASS_NAME, 'gloss_Objective'))
            )
            print("\nObjective内容:\n", objective_element.text)
            
        finally:
            # 确保操作完成后关闭浏览器
            driver.quit()

demo = Demo()
demo.demo_get_contents()

关键改动说明

  • 切换iframe上下文:页面实际内容嵌套在id="contentFrame"的iframe中,必须先切换到该iframe才能定位内部元素(若iframe属性变化,可通过F12开发者工具重新确认定位方式)
  • 延长等待时间:将等待时间调整为10秒,确保iframe及内部JS渲染的内容完全加载
  • 单个元素定位:用visibility_of_element_located替换原方法,返回单个元素对象后可直接获取文本
  • 添加资源清理:通过finally块保证浏览器无论是否报错都会正常关闭

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:33:13