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

如何在Selenium中无需等待当前请求响应切换driver标签页

Selenium无需等待页面加载完成直接切换标签页实现方案

核心实现逻辑是修改Selenium默认的页面加载策略,无需等待整个页面资源加载完成即可结束driver.get()的阻塞,立刻执行后续的新建标签页、切换操作。

具体实现步骤

1. 修改页面加载策略

Selenium默认的normal加载策略会等待页面所有静态资源、DOM完全加载完成才会结束driver.get()的执行,首先需要调整加载策略:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 可选两种加载策略,根据你的需求选择:
# 方案1:none,只要浏览器发出请求就立刻返回get方法,完全不等待任何加载动作,最节省时间
chrome_options.page_load_strategy = 'none'
# 方案2:eager,等待DOM基础结构渲染完成就返回,不用等图片、样式等资源加载,适合需要基础DOM的场景
# chrome_options.page_load_strategy = 'eager'

driver = webdriver.Chrome(options=chrome_options)

2. 触发请求后立刻新建切换标签页

# 触发目标页面请求,因为修改了加载策略,这里不会等待10秒加载,执行完立刻走下一步
driver.get("https://test.com")
# 保存当前标签页的句柄,后续回来解析数据需要用到
origin_tab = driver.current_window_handle
# 新建空白标签页
driver.execute_script("window.open('');")
# 定位新标签页的句柄并切换
new_tab = [handle for handle in driver.window_handles if handle != origin_tab][0]
driver.switch_to.window(new_tab)

# 这里可以直接在新标签页执行其他爬取操作,不会受旧标签页加载的影响
driver.get("https://test.com/other-page")

3. 后续返回旧标签页解析数据

等你需要读取最早触发的页面数据时,再切回旧标签页,通过显式等待定位你需要的元素即可:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 切回原始标签页
driver.switch_to.window(origin_tab)
# 显式等待你需要的目标元素出现,最多等待15秒,可根据实际情况调整
try:
    target_element = WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "你需要解析的元素选择器"))
    )
    # 正常解析元素内容即可
    print(target_element.text)
except Exception as e:
    print("页面加载超时或元素不存在", e)

注意事项

  • 使用none策略时,刚执行完driver.get()不要直接操作当前页面元素,此时DOM还未渲染,大概率会抛出元素不存在的错误,操作元素前必须加显式等待
  • 多标签页操作时一定要提前保存每个标签页的句柄,避免切换时定位错误页面
  • 可以根据实际业务需要给显式等待加异常捕获,避免单个页面加载失败卡住整个爬取流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:15:05