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

Python中如何让Selenium的driver.get(url)提前返回?

解决方案:Selenium ChromeDriver 提前结束页面加载并等待目标元素

首先明确:Selenium 的 driver.get() 本身不支持直接在指定元素可点击时返回,因为它的默认逻辑是等待页面的 document.readyState 变为 complete(所有资源加载完成)才会结束调用。不过可以通过以下几种更优雅的方式替代你当前的超时捕获方案:

1. 修改Chrome的页面加载策略(推荐)

ChromeDriver支持三种页面加载策略,通过设置page_load_strategy可以让driver.get()更早返回,无需手动设置超时并捕获异常:

  • normal(默认):等待页面完全加载(document.readyState = complete)
  • eager:等待DOM加载完成(document.readyState = interactive),此时页面核心内容已加载,无需等待广告、图片等非必要资源
  • none:完全不等待页面加载,调用driver.get()后立即返回

代码示例:设置为eager策略

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

options = Options()
# 设置页面加载策略为eager
options.page_load_strategy = 'eager'

driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
# 此时driver.get()会在DOM加载完成后立即返回,不用等广告
driver.get(url)
# 然后等待目标元素可点击
WebDriverWait(driver, 30).until(
    EC.element_to_be_clickable((By.ID, "target-element-id"))
).click()

如果eager策略仍有延迟,可以尝试none策略,此时需要确保后续的WebDriverWait逻辑足够可靠:

options.page_load_strategy = 'none'

2. 封装自定义函数实现类似期望的调用方式

如果你想要类似driver.get(url, wait_condition)的简洁调用,可以自己封装一个工具函数:

def get_and_wait(driver, url, wait_condition, timeout=30):
    driver.get(url)
    return WebDriverWait(driver, timeout).until(wait_condition)

# 调用示例
get_and_wait(
    driver,
    url,
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".target-btn"))
).click()

结合页面加载策略使用这个封装函数,就能达到既高效又简洁的效果。

对比你当前的方案

你当前通过set_page_load_timeout(0)+捕获超时异常的方式,本质上是强制终止页面加载,但这种方式依赖异常处理,代码不够优雅。而修改页面加载策略是官方提供的标准方案,逻辑更清晰,也更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:03:12