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

Selenium如何实时获取页面重定向后的URL(无需等待页面加载)

实时获取Selenium中浏览器URL变化(无需等待页面加载)

现有代码的问题

你当前的循环是无间隔轮询,会疯狂占用CPU导致运行极慢;而且Selenium默认的页面加载策略是等待页面完全加载完成才会更新current_url,这就导致你没法在页面加载前拿到新URL。

解决方案

1. 修改页面加载策略

先把浏览器的加载策略改成不等待页面完全加载,这样能更早获取到URL变化。支持三种策略:

  • normal:默认,等待页面完全加载
  • eager:等待DOM加载完成就停止,不用等图片、样式等资源
  • none:完全不等待页面加载,直接执行后续操作

示例代码:

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

options = Options()
# 推荐用eager,平衡速度和可靠性
options.page_load_strategy = 'eager'
# 极端场景可以用none,但可能需要自己处理元素等待
# options.page_load_strategy = 'none'

driver = webdriver.Chrome(options=options)

2. 高效监听URL变化

方式一:用Selenium内置的等待条件

直接用url_changes等待URL变化,代码简洁且资源占用低:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

initial_url = driver.current_url

# 执行你的自动化操作
# SOME AUTOMATION STEPS

# 等待URL变化,超时时间可自行调整(这里设10秒)
try:
    WebDriverWait(driver, 10).until(EC.url_changes(initial_url))
    new_url = driver.current_url
    print(new_url)
except:
    print("URL未在指定时间内发生变化")
finally:
    driver.quit()

方式二:注入JavaScript定时监听

适合需要更实时的场景,可自定义检查间隔:

import time

# 注入JS监听URL变化
driver.execute_script("""
window.currentTrackedUrl = document.URL;
window.urlHasChanged = false;
// 每100毫秒检查一次,可根据需求调整
setInterval(() => {
    if (document.URL !== window.currentTrackedUrl) {
        window.currentTrackedUrl = document.URL;
        window.urlHasChanged = true;
    }
}, 100);
""")

# 执行你的自动化操作
# SOME AUTOMATION STEPS

# 循环检查URL变化
while True:
    changed = driver.execute_script("return window.urlHasChanged;")
    if changed:
        new_url = driver.execute_script("return window.currentTrackedUrl;")
        print(new_url)
        driver.quit()
        break
    # 加短等待减少CPU占用
    time.sleep(0.05)

3. 优化原有轮询逻辑

如果你坚持用自己的循环逻辑,一定要加短时间等待,避免无意义的CPU消耗:

import time

initial_url = driver.current_url
url_change = True

# 执行你的自动化操作
# SOME AUTOMATION STEPS

while url_change:
    if driver.current_url != initial_url:
        url_change = False
        print(driver.current_url)
        driver.quit()
    # 每次循环等待50毫秒,大幅降低CPU占用
    time.sleep(0.05)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:32:46