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

Selenium如何在目标元素加载完成后中断driver.get()页面加载?

解决Selenium中driver.get()阻塞,目标元素加载完成即中断加载的方案

针对你爬取纳斯达克股息信息时遇到的driver.get()卡顿问题,以下两种方案可以实现目标元素加载完成后立即中断页面加载,无需等待满超时时间:

方案1:修改页面加载策略

通过设置浏览器的pageLoadStrategy为eager,让driver.get()在DOM树构建完成后就结束阻塞(而非等待所有图片、脚本等资源加载完毕),之后再用WebDriverWait精准等待目标元素,元素出现后立即停止剩余资源加载。

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

URL = 'https://www.nasdaq.com/market-activity/stocks/aapl/dividend-history'

# 配置Firefox页面加载策略为DOM就绪即完成
firefox_options = webdriver.FirefoxOptions()
firefox_options.set_capability("pageLoadStrategy", "eager")

driver = webdriver.Firefox(options=firefox_options)
driver.get(URL)

# 等待股息数据表格加载(替换为你实际需要的目标元素定位)
target_table = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="main-content"]/div[3]/div[1]/div/div[2]/div[2]/table'))
)

# 立即停止剩余资源加载
driver.execute_script("window.stop();")

# 后续提取股息数据的操作...

方案2:多线程后台监控元素

启动一个后台线程,在主线程执行driver.get()的同时,轮询监控目标元素状态,一旦元素加载完成就调用window.stop()中断页面加载。

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

URL = 'https://www.nasdaq.com/market-activity/stocks/aapl/dividend-history'

driver = webdriver.Firefox()

def monitor_element_and_stop():
    try:
        # 高频轮询目标元素(0.5秒一次)
        WebDriverWait(driver, 10, poll_frequency=0.5).until(
            EC.presence_of_element_located((By.XPATH, '//*[@id="main-content"]/div[3]/div[1]/div/div[2]/div[2]/table'))
        )
        # 元素出现后立即中断加载
        driver.execute_script("window.stop();")
    except Exception as e:
        pass

# 启动监控线程
monitor_thread = threading.Thread(target=monitor_element_and_stop)
monitor_thread.start()

# 执行页面加载
try:
    driver.get(URL)
except Exception:
    # 加载被中断时捕获异常,不影响后续操作
    pass

# 等待监控线程结束
monitor_thread.join()

# 后续提取股息数据的操作...

注意事项

  • 请将代码中的元素定位替换为你实际需要的股息信息对应的元素(不要用//div这类宽泛定位,避免提前停止加载但未获取到目标数据)。
  • 多线程方案中,Selenium的driver对象在跨线程操作时需确保线程安全,本方案仅做元素状态检查和脚本执行,无冲突风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:45:27