Python Selenium:无需等待页面加载即可新建标签页
解决方案
问题根源在于Selenium默认的页面加载策略:driver.get()会等待页面完全加载完成(包括所有图片、资源)才会执行后续代码,导致每个标签页都要等待1分钟。要实现"加载同时新建下一个标签页",核心是修改加载策略,让Selenium无需等待页面完全加载即可继续执行。
具体修改步骤
- 设置页面加载策略:通过ChromeOptions添加
page_load_strategy,可选值:eager:等待DOM结构加载完成(document.readyState变为interactive),无需等待图片、视频等资源,平衡速度和页面可用性none:完全不等待页面加载,执行driver.get()后立即继续后续操作
- 调整循环逻辑:避免创建多余空标签页,确保最终生成10个目标URL标签页
修改后的代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.window import WindowTypes from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ec options = webdriver.ChromeOptions() options.add_experimental_option("detach", True) options.add_argument("start-maximized") # 设置为eager策略,DOM加载完成就继续执行 options.page_load_strategy = 'eager' driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) url = 'http://my_url/Index' # 打开第一个标签页 driver.get(url) # 循环创建剩余9个标签页,总共10个 for _ in range(9): # 新建空白标签页 driver.switch_to.new_window(WindowTypes.TAB) # 访问目标URL,此时不会等待页面完全加载 driver.get(url) # 可选:如果需要确保最后一个标签页加载完成,添加等待 # WebDriverWait(driver, 60).until(ec.pageloaded)
补充说明
- 若使用
none策略,页面可能还在后台加载,但代码会继续执行,适合完全不需要等待页面元素的场景 - 之前尝试的
time.sleep()、WebDriverWait都是主动等待加载,反而会阻塞流程,因此需要通过加载策略从根源解决阻塞问题
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

