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

使用Selenium Chrome切换about:Blank新标签页的报错与检测问题

问题分析与修复方案

核心错误原因

  • wait = time.sleep(2):time.sleep()函数返回None,后续调用wait.until()必然触发AttributeError,这是直接报错的根源。
  • 重复导入模块:多次导入webdriver和WebDriverWait,属于冗余代码。
  • 配置无效:在初始化driver之后才设置ChromeOptions,此时配置不会生效,因为driver已经创建完成。
  • 等待逻辑重复且不完善:重复执行窗口数量等待,未处理about:blank的过渡加载状态。

修复后的完整代码

from seleniumbase import Driver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

URL = 'https://www.fedex.com/fedextrack/?trknbr=123456789012&trkqual=2460234000~123456789012~FX'

# 提前配置下载参数,初始化driver时生效
download_options = {
    "download.default_directory": r"C:\Users\User1\Downloads\BPAAS",
    "download.prompt_for_download": True,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}

# 初始化driver并传入配置
driver = Driver(uc=True, external_pdf=True, chrome_options=download_options)
driver.get(URL)
driver.maximize_window()

# 正确创建WebDriverWait实例
wait = WebDriverWait(driver, 10)

# 点击"获取凭证"按钮
wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="obtain-proof-link-id"]'))).click()
time.sleep(1)  # 短等待确保页面状态更新

# 记录原始窗口句柄,点击"查看PDF"按钮
original_window = driver.current_window_handle
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[class="fdx-c-button fdx-c-button--primary fdx-c-button--responsive fdx-u-pt--4 fdx-u-pb--4"]'))).click()

# 处理新窗口切换,适配about:blank过渡状态
try:
    # 延长超时时间,等待窗口数量变为2
    wait.until(EC.number_of_windows_to_be(2))
    # 遍历切换到非原始窗口
    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            # 等待PDF页面实际加载完成,避免停留在about:blank
            wait.until(EC.url_contains("fedex"))
            break
except Exception as e:
    print(f"切换窗口失败: {e}")

print(driver.current_url)
driver.quit()

关键修复点说明

  • 修正Wait实例:替换错误的wait = time.sleep(2),创建有效的WebDriverWait实例用于显式等待。
  • 提前配置选项:在初始化driver前设置下载参数,通过chrome_options传入确保配置生效。
  • 优化等待逻辑:延长超时时间,添加PDF页面URL的等待判断,处理about:blank的过渡加载状态。
  • 清理冗余代码:删除重复导入的模块,简化代码结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:15:34