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

Selenium无法识别认证弹窗:driver.switch_to.alert抛出no such alerts异常

解决Selenium无法识别HTTP基础认证弹窗的问题

问题背景

打开Inditex内部系统链接时,浏览器弹出HTTP基础认证弹窗(带用户名、密码输入框及提交/取消按钮),尝试用driver.switch_to.alert操作时抛出no such alerts异常——这是因为该弹窗属于浏览器级别的系统组件,并非JavaScript原生Alert,无法被WebDriver的alert接口识别。

解决方案

方案1:URL嵌入认证信息(推荐)

HTTP基础认证支持直接在URL中携带用户名和密码,访问时会自动完成认证,不会触发弹窗。格式为 https://用户名:密码@域名/路径。

修改代码中的URL部分:

# 替换为实际的用户名和密码
username = "your_username"
password = "your_password"
url = f"https://{username}:{password}@drive.inditex.com/drfrcomr/sales/home?brand=2"
driver.get(url)

方案2:模拟ESC键关闭弹窗

如果仅需关闭弹窗无需完成认证,可以用ActionChains发送ESC键,注意要确保弹窗已加载完成:

from selenium import webdriver
from selenium.webdriver import Chrome 
from selenium.webdriver.chrome.service import Service 
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait

options = webdriver.ChromeOptions()
options.headless = False
options.page_load_strategy = 'none' 
chrome_path = ChromeDriverManager().install() 
chrome_service = Service(chrome_path)
driver = Chrome(options=options, service=chrome_service) 
driver.implicitly_wait(5)

url = "https://drive.inditex.com/drfrcomr/sales/home?brand=2" 
driver.get(url)

# 等待页面加载完成,确保弹窗已弹出
WebDriverWait(driver, 10).until(lambda d: d.execute_script("return document.readyState") == "complete")
# 发送ESC键关闭弹窗
ActionChains(driver).send_keys(Keys.ESCAPE).perform()

关键说明

  • 浏览器的HTTP基础认证弹窗属于系统层面组件,不属于网页DOM,因此Selenium的switch_to.alert仅对JS原生弹窗有效,无法识别这类弹窗。
  • 方案1稳定性最高,若系统允许URL传参优先使用;方案2依赖弹窗加载时机,可能需要调整等待时长适配不同环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:25:20