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

使用Python和Selenium操作登录弹窗时提示无弹窗的问题

解决Selenium无法识别登录弹窗的问题

看起来你遇到的是HTTP基本认证弹窗,而非普通的JavaScript alert弹窗——这就是driver.switch_to.alert报错“不存在弹窗”的核心原因。这种弹窗是浏览器层面的系统级弹窗,不属于网页DOM元素范畴,Selenium的常规弹窗处理方法对它完全无效。

下面给你两种可行的解决方案:

方案1:直接将凭证嵌入URL(最简单优先)

多数浏览器支持在URL中直接携带用户名和密码,格式为http://用户名:密码@目标地址。访问页面时浏览器会自动填充认证信息,直接跳过弹窗:

import time
from selenium import webdriver

driver = webdriver.Chrome("C:/Users/dhias/OneDrive/Bureau/stgg/chromedriver.exe")
# 替换成你的实际密码
driver.get("http://Admin:你的密码@10.15.44.177/control/userimage.html")
time.sleep(3)
driver.maximize_window()
btn = driver.find_element_by_name("TheFormButton3")
btn.click()
# 后续页面操作...

注意:部分现代浏览器(如Chrome新版本)出于安全考虑,会限制这种URL携带凭证的方式,若方案1失效,可尝试方案2。

方案2:用pynput模拟键盘输入(处理系统级弹窗)

你代码里已经导入了pynput,可以用它模拟键盘操作,直接向系统弹窗输入凭证:

import time
from pynput.keyboard import Controller, Key
from selenium import webdriver

driver = webdriver.Chrome("C:/Users/dhias/OneDrive/Bureau/stgg/chromedriver.exe")
driver.get("http://10.15.44.177/control/userimage.html")
time.sleep(3)
window_before = driver.window_handles[0]
driver.maximize_window()
btn = driver.find_element_by_name("TheFormButton3")
btn.click()
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
time.sleep(2)  # 等待弹窗完全弹出并成为当前活动窗口

# 初始化键盘控制器
keyboard = Controller()
# 输入用户名
keyboard.type('Admin')
# 按Tab切换到密码输入框
keyboard.press(Key.tab)
keyboard.release(Key.tab)
# 输入你的实际密码
keyboard.type('你的密码')
# 按回车完成认证
keyboard.press(Key.enter)
keyboard.release(Key.enter)

关键说明

  • 两种弹窗的本质区别:JS alert是网页脚本生成的,属于DOM范畴,可通过switch_to.alert处理;而HTTP基本认证弹窗是浏览器与服务器交互产生的系统级弹窗,Selenium无法直接定位,只能通过URL嵌入或模拟输入解决。
  • 使用pynput时,要确保sleep时间足够让弹窗完全弹出并激活,否则键盘输入可能会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:12:47