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

Selenium中.click()触发页面加载等待,如何跳过该等待?

解决Selenium点击后等待页面加载阻塞循环的问题

核心原因

你遇到的问题是Selenium默认的click()方法在触发页面跳转/重载时,会等待页面完全加载完成才继续执行后续代码,这就导致循环被卡住,没法立刻切换到下一个窗口。

解决方案一:修改Chrome页面加载策略

通过设置Chrome的页面加载策略,让Selenium不用等页面所有资源加载完就继续执行。有两种可选策略:

  • eager:等待DOM加载完成(触发DOMContentLoaded事件)就停止等待,适合大多数场景
  • none:完全不等待页面加载,适合点击后立刻切换窗口、不需要操作当前页面的情况

代码示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
# 选其中一种策略即可
options.page_load_strategy = 'eager'  # 推荐用这个
# options.page_load_strategy = 'none'

driver = webdriver.Chrome(options=options)

a = 3  # 替换成你的实际变量值
for i in range(a):    
    driver.switch_to.window(driver.window_handles[i + 1])
    driver.find_element(By.CLASS_NAME, "saveButton").click()

解决方案二:用JavaScript执行点击操作

直接通过JS代码触发按钮点击,绕过Seleniumclick()方法自带的页面加载等待逻辑。这种方法不用修改全局配置,只针对特定点击生效。

代码示例:

for i in range(a):    
    driver.switch_to.window(driver.window_handles[i + 1])
    save_btn = driver.find_element(By.CLASS_NAME, "saveButton")
    # 用JS点击按钮,不会触发Selenium的页面加载等待
    driver.execute_script("arguments[0].click();", save_btn)

为什么你之前的方法没生效?

  • Asyncio:Selenium的核心API本身是阻塞式设计,异步框架没法跳过它内部的页面加载等待逻辑,所以没用
  • 多进程:每个进程开新浏览器必然占用大量资源,完全没必要这么做
  • 线程:Selenium的WebDriver实例不是线程安全的,多线程操作同一个driver会出现各种异常,解决不了问题
  • set_page_load_timeout():超时会直接终止页面加载进程,可能导致点击后的保存请求还没发送完成就被中断,所以保存操作失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:01:13