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

Python Selenium Edge点击按钮后Basic Auth弹窗处理超时问题求助

解决方案

1. 修改页面加载策略,解决click()超时问题

点击报告链接触发的Basic Auth弹窗属于系统级对话框,会中断页面加载流程,导致Selenium默认等待页面完全加载时超时。先调整Edge的页面加载策略,跳过全量页面等待:

from selenium import webdriver
from selenium.webdriver.edge.options import Options

# 初始化Edge选项,设置页面加载策略为'eager'(仅等待DOM加载完成)
edge_options = Options()
edge_options.page_load_strategy = 'eager'
# 也可设为'none',完全不等待页面加载,更适配弹窗场景
# edge_options.page_load_strategy = 'none'

driver = webdriver.Edge(options=edge_options)

# 执行登录流程...

# 此时点击报告链接不会因页面加载卡住
reportBt.click()

2. 通过CDP预注入Authorization请求头(推荐)

Basic Auth本质是HTTP请求头验证,直接给报告请求注入认证头,从根源避免弹窗弹出:

import base64
from selenium import webdriver

# 结合上述页面加载策略初始化driver
driver = webdriver.Edge(options=edge_options)

# 执行登录步骤...

# 生成Basic Auth的base64编码串
username = "你的账号"
password = "你的密码"
auth_token = base64.b64encode(f"{username}:{password}".encode('utf-8')).decode('utf-8')

# 使用Chrome DevTools Protocol设置全局请求头,携带认证信息
driver.execute_cdp_cmd(
    'Network.setExtraHTTPHeaders',
    {'headers': {'Authorization': f'Basic {auth_token}'}}
)

# 点击报告链接,请求自动带上认证头,不会触发弹窗
reportBt.click()

3. 用pywin32直接控制系统认证弹窗

如果前两种方法无效,用Windows API直接定位并操作弹窗,比AutoIT更稳定:

先安装依赖:pip install pywin32

import win32gui
import win32api
import win32con
import time

def fill_basic_auth(username, password):
    time.sleep(1.5)  # 等待弹窗渲染完成
    # 替换为你的弹窗标题,中文通常是"需要认证",英文为"Authentication Required"
    dialog_hwnd = win32gui.FindWindow(None, "需要认证")
    if not dialog_hwnd:
        return
    
    # 定位用户名输入框(第一个Edit控件)
    username_input = win32gui.FindWindowEx(dialog_hwnd, None, "Edit", None)
    win32gui.SendMessage(username_input, win32con.WM_SETTEXT, 0, username)
    
    # 定位密码输入框(第二个Edit控件)
    password_input = win32gui.FindWindowEx(dialog_hwnd, username_input, "Edit", None)
    win32gui.SendMessage(password_input, win32con.WM_SETTEXT, 0, password)
    
    # 定位确定按钮并点击
    confirm_btn = win32gui.FindWindowEx(dialog_hwnd, None, "Button", "确定")
    win32api.SendMessage(dialog_hwnd, win32con.WM_COMMAND, 1, confirm_btn)

# 执行登录步骤...
reportBt.click()
# 调用函数处理弹窗
fill_basic_auth("你的账号", "你的密码")

注意事项

  • 若弹窗标题不是"需要认证",可使用win32gui.EnumWindows遍历窗口获取准确标题;
  • CDP方法需确保报告链接域名与当前页面一致,否则需单独给对应域名设置请求头;
  • 页面加载策略设为'none'后,后续元素操作需手动添加WebDriverWait等待,避免元素未就绪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:26:13