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

Selenium超时后,能否获取已渲染完成页面的page_source?

问题解答

按你当前的脚本,无法获取到page_source——因为set_page_load_timeout等待的是页面达到document.readyState === 'complete'状态,一旦超时触发TimeoutException,代码会直接进入异常处理分支,page_source = driver.page_source这行代码根本不会执行。

不过可以通过调整脚本逻辑或配置,来获取已渲染的页面内容,以下是几种可行方案:

  • 超时后强制获取源码:即使页面没加载完成,浏览器已经渲染的内容依然可以被获取,只需在异常块中补充获取逻辑:

    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    
    driver = webdriver.Chrome()
    driver.set_page_load_timeout(120)
    page_source = ""
    try:
      driver.get(link)
      page_source = driver.page_source
    except TimeoutException as e:
      print(e)
      # 超时后尝试获取已渲染的页面源码
      page_source = driver.page_source
    finally:
      driver.quit()
    
  • 修改页面加载策略:让Selenium不等待页面完全加载完成,而是等到DOM结构加载完毕(interactive状态)就停止等待,避免被阻塞脚本拖超时:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    # 设置加载策略为eager,等待到DOM可交互状态即停止
    chrome_options.page_load_strategy = 'eager'
    driver = webdriver.Chrome(options=chrome_options)
    driver.get(link)
    page_source = driver.page_source
    driver.quit()
    
  • 用JavaScript直接获取DOM内容:通过执行JS代码获取当前页面的完整HTML,不受页面加载状态的限制:

    # 可放在try块或except块中执行
    page_source = driver.execute_script("return document.documentElement.outerHTML;")
    
  • 拦截阻塞脚本:如果知道是哪个脚本导致的阻塞,可以通过Chrome配置直接拦截该脚本,让页面正常加载完成:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    # 替换为实际阻塞脚本的URL或匹配规则
    chrome_options.add_argument("--block-urls=https://example.com/blocking-script.js")
    driver = webdriver.Chrome(options=chrome_options)
    driver.get(link)
    page_source = driver.page_source
    driver.quit()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:27:24