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

如何为undetected_chromedriver(v3.5.5)的Get请求添加Token请求头?

在undetected_chromedriver v3.5.5中为GET请求添加Token请求头

你之前的代码无法生效,是因为options.add_argument()只能添加Chrome的启动命令行参数,而authorization并不是合法的启动参数,浏览器不会识别它来设置请求头。下面提供两种可行的解决方案:

方法一:通过Chrome DevTools Protocol(CDP)注入请求头

创建浏览器实例后,利用CDP的Network.setExtraHTTPHeaders命令,全局添加自定义请求头:

import undetected_chromedriver as uc

def init_webdriver(headless=False, token=None):
    options = uc.ChromeOptions()
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0"
    options.add_argument(f"user-agent={user_agent}")
   
    driver = uc.Chrome(headless=headless, options=options)
    
    # 如果token存在,通过CDP设置全局请求头
    if token:
        extra_headers = {
            "Authorization": f"Bearer {token}"  # 根据实际Token格式调整,比如Token xxx
        }
        driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": extra_headers})
    
    return driver

注意:如果你的Token格式不是Bearer,直接替换成对应格式即可,比如"Authorization": f"Token {token}"。

方法二:通过自定义Chrome扩展拦截并添加请求头

如果CDP方法在某些场景下失效(比如页面刷新后需要重新设置),可以用Chrome扩展实现持久化的请求头修改:

  1. 创建一个扩展文件夹,比如header_modifier,里面新建两个文件:

manifest.json(扩展配置):

{
    "manifest_version": 3,
    "name": "Header Modifier",
    "version": "1.0",
    "permissions": ["declarativeNetRequest", "activeTab"],
    "host_permissions": ["<all_urls>"],
    "background": {
        "service_worker": "background.js"
    }
}

background.js(拦截请求并添加头):

chrome.declarativeNetRequest.updateDynamicRules({
    addRules: [
        {
            "id": 1,
            "priority": 1,
            "action": {
                "type": "modifyHeaders",
                "requestHeaders": [
                    {
                        "header": "Authorization",
                        "operation": "set",
                        "value": "Bearer YOUR_TOKEN_HERE"  // 这里后续会用代码动态替换
                    }
                ]
            },
            "condition": {
                "urlFilter": "*",
                "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "script", "stylesheet"]
            }
        }
    ],
    removeRuleIds: [1]
});
  1. 修改Python代码,动态替换扩展中的Token并加载扩展:
import undetected_chromedriver as uc
import os
import shutil

def init_webdriver(headless=False, token=None):
    options = uc.ChromeOptions()
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0"
    options.add_argument(f"user-agent={user_agent}")
    
    if token:
        # 复制扩展模板到临时目录
        temp_ext_dir = "./temp_header_ext"
        if os.path.exists(temp_ext_dir):
            shutil.rmtree(temp_ext_dir)
        shutil.copytree("./header_modifier", temp_ext_dir)
        
        # 替换background.js中的Token
        bg_js_path = os.path.join(temp_ext_dir, "background.js")
        with open(bg_js_path, "r", encoding="utf-8") as f:
            content = f.read()
        content = content.replace("YOUR_TOKEN_HERE", token)
        with open(bg_js_path, "w", encoding="utf-8") as f:
            f.write(content)
        
        # 加载扩展
        options.add_argument(f"--load-extension={os.path.abspath(temp_ext_dir)}")
   
    driver = uc.Chrome(headless=headless, options=options)
    return driver

这种方法的优势是请求头会自动应用到所有符合规则的请求中,无需每次页面跳转后重新设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:31:19