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

如何让Python的Selenium Driver等待页面全加载并解决get返回None问题?

解决Selenium页面加载与字典存储问题

首先明确:driver.get(link)本身就没有返回值,所以你直接把它赋值给self.data[link]肯定会得到None,这是方法设计的正常情况,要获取页面源码得用driver.page_source,但必须等页面完全加载完成后再调用。

针对你要等待整个页面加载完成的需求,给你几个可行的方案:

方案1:显式等待页面DOM加载完成

利用WebDriverWait等待浏览器的document.readyState变为complete,这是判断页面基本加载完成的标准:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException

for link in your_link_list:
    self.driver.get(link)
    # 等待页面加载完成,最多等10秒
    try:
        WebDriverWait(self.driver, 10).until(
            lambda d: d.execute_script('return document.readyState') == 'complete'
        )
        # 页面加载完成后,存入页面源码
        self.data[link] = self.driver.page_source
    except TimeoutException:
        # 超时处理,比如标记该链接加载失败
        self.data[link] = "页面加载超时"
        continue

方案2:修改浏览器加载策略

如果页面包含大量资源(图片、视频),默认的normal加载策略会等待所有资源加载完成,你可以明确设置;如果不需要等待资源加载,也可以用eager策略(仅等待DOM加载完成),根据需求选择:

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException

chrome_options = Options()
# normal:等待所有资源加载完成;eager:等待DOM加载完成;none:不等待
chrome_options.page_load_strategy = 'normal'
self.driver = webdriver.Chrome(options=chrome_options)

# 循环处理链接
for link in your_link_list:
    self.driver.get(link)
    # 结合方案1的等待逻辑,确保加载完成
    try:
        WebDriverWait(self.driver, 10).until(
            lambda d: d.execute_script('return document.readyState') == 'complete'
        )
        self.data[link] = self.driver.page_source
    except TimeoutException:
        self.data[link] = "加载超时"
        continue

你之前代码的问题纠正

  1. 用WebDriverWait等待特定元素不符合你的需求,换成等待document.readyState才是正确的方向;
  2. finally里直接continue会导致不管等待成功还是失败都跳过存储逻辑,应该把超时处理放在except块中,成功时才存入页面源码;
  3. driver.implicitly_wait(10)是针对元素查找操作的超时设置,和页面整体加载的等待无关,所以对你的场景无效。

内容的提问来源于stack exchange,提问作者Kevin A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:40:24