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

如何用Selenium或Postman实现需登录验证的文件下载脚本?

问题解决思路

1. 先明确你遇到的是HTTP Basic/Digest认证

你看到的弹窗不是JavaScript alert,是浏览器原生的HTTP身份验证窗口,这就是Selenium报错NoAlertPresentException的原因——Selenium的switch_to.alert只能处理JS生成的弹窗,管不了浏览器层面的认证框。

这种认证的核心特点:

  • 无HTML登录表单,由浏览器直接弹出原生验证窗口
  • 密码不会存在Cookies中,而是通过请求头的Authorization字段传输(内容为Base64编码的用户名:密码字符串)
  • 登录成功后浏览器会记住凭证,后续请求自动携带Authorization头,因此不会重复弹窗

2. 脚本下载的可行方案

方案一:用requests库直接构造认证请求

这是最简便的非浏览器模拟方案:

import requests
from requests.auth import HTTPBasicAuth

# 替换为你的实际信息
file_url = "https://目标域名.com/需要下载的文件路径"
username = "你的用户名"
password = "你的密码"

# 发送带认证的请求
response = requests.get(file_url, auth=HTTPBasicAuth(username, password))
# 保存文件到本地
with open("下载文件名称.ext", "wb") as f:
    f.write(response.content)

如果是Digest认证,只需将HTTPBasicAuth替换为HTTPDigestAuth即可。

方案二:在URL中直接嵌入凭证

多数工具和浏览器支持这种带认证信息的URL格式:

http://用户名:密码@目标域名.com/文件路径

用Selenium实现时,直接构造该URL访问即可:

from selenium import webdriver

original_url = "https://目标域名.com/文件路径"
auth_url = f"https://{username}:{password}@{original_url.split('//')[1]}"
driver = webdriver.Chrome()
driver.get(auth_url)
# 后续可执行下载相关操作

方案三:用ChromeOptions配置认证参数

适合必须依赖浏览器模拟的场景:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 替换为目标域名的白名单
options.add_argument('--auth-server-whitelist=*.目标域名.com')
options.add_argument('--auth-negotiate-delegate-whitelist=*.目标域名.com')
options.add_argument(f'--user={username}')
options.add_argument(f'--password={password}')

driver = webdriver.Chrome(options=options)
driver.get(original_url)

3. 页面源码为空的原因

未完成认证时,服务器返回的是401未授权状态对应的空HTML响应;只有认证通过后,服务器才会返回实际页面内容,因此你之前查看的Source为空——完成认证后再刷新页面就能看到正常源码。

内容的提问来源于stack exchange,提问作者Peter Mølgaard Pallesen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:22:54