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

Python Selenium将含特殊字符的账号密码嵌入URL登录弹窗报404如何解决

解决方案

根因说明

Chrome 80及以上版本默认禁用了URL携带Basic Auth凭据的能力,你拼接在URL中的账号密码会被浏览器自动剔除,请求没有携带身份认证信息才会返回404错误,和特殊字符的URL编码没有关系。

最优解法(无需额外依赖)

直接通过Selenium自带的Chrome DevTools Protocol(CDP)接口注入Basic Auth头即可,所有特殊字符不需要单独做URL编码:

import base64
from selenium import webdriver

driver = webdriver.Chrome()

# 填写你的实际账号密码
username = "firstname.lastname@test.com"
password = "testpass*11"

# 生成标准Basic Auth凭证
auth_cred = f"{username}:{password}"
encoded_cred = base64.b64encode(auth_cred.encode("utf-8")).decode("utf-8")

# 全局注入认证头
driver.execute_cdp_cmd(
    "Network.setExtraHTTPHeaders",
    {"headers": {"Authorization": f"Basic {encoded_cred}"}}
)

# 直接访问目标地址即可,无需在URL中拼接账号密码
driver.get("https://test.company.com")

可选解法(需第三方依赖)

如果需要更复杂的请求修改能力,可以使用selenium-wire库实现认证头注入:

  1. 先安装依赖:
    pip install selenium-wire
  2. 代码示例:
import base64
from seleniumwire import webdriver

driver = webdriver.Chrome()

username = "firstname.lastname@test.com"
password = "testpass*11"
encoded_cred = base64.b64encode(f"{username}:{password}".encode()).decode()

# 定义请求拦截器,注入认证头
def add_auth_header(request):
    request.headers["Authorization"] = f"Basic {encoded_cred}"

driver.request_interceptor = add_auth_header
driver.get("https://test.company.com")

两种方案都不需要对账号密码里的特殊字符做URL编码,base64编码已经兼容所有字符场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:02