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库实现认证头注入:
- 先安装依赖:
pip install selenium-wire - 代码示例:
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
相关产品推荐
相关产品推荐

