讲师中心 微信公众号
AI工具推荐 视频效率加速

在Python中怎么通过Playwright修改请求头中的User Agent?

胖磊小哥_8443

胖磊小哥_8443

发布时间:2026-10-21 08:57:22

|

758人浏览过

|

来源于php中文网

原创

最稳妥方式是通过 launch 的 user_agent 参数设置全局 UA,它作用于所有页面请求且不可动态修改;route 拦截仅适用于特定请求但需全量替换 headers;set_extra_http_headers 对 UA 无效因 Chromium 硬性限制;移动端应优先使用 devices 模板而非手动拼接 UA。

在python中怎么通过playwright修改请求头中的user agent?

用 launch 启动时通过 user_agent 参数设置全局 UA

Playwright 的浏览器实例在启动时就能指定默认 User-Agent,这是最常用也最稳妥的方式。它会作用于所有后续页面请求(包括导航、资源加载、fetch 等),且无需手动拦截或重写。

注意:这个参数只在 launch 或 launch_persistent_context 时生效,不能在已启动的浏览器中动态修改。

  • user_agent 必须是字符串,例如 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
  • 不同浏览器内核对 UA 格式无强校验,但若填空或含非法字符,部分网站可能拒绝响应
  • Chrome 和 Firefox 行为一致;WebKit(Safari)下某些 UA 字符串可能触发兼容性降级,建议用其默认前缀微调
from playwright.sync_api import sync_playwright
<p>with sync_playwright() as p:
browser = p.chromium.launch(
user_agent="MyBot/1.0 (Custom UA)"
)
page = browser.new_page()
page.goto("<a href="https://www.php.cn/link/7ac09a39f051ff62eefbafd363b1bbb3">https://www.php.cn/link/7ac09a39f051ff62eefbafd363b1bbb3</a>")
print(page.text_content("pre"))  # 查看实际发送的 headers
browser.close()

用 route 拦截并修改单个请求的 UA(不推荐用于全局)

如果你只需要改某几个特定请求(比如 API 调用),而不是整个页面行为,可以用 page.route 拦截并覆写 User-Agent。但要注意:这仅影响被匹配到的请求,且必须在 page.goto 前设置,否则可能错过初始 HTML 请求。

关键限制:Playwright 的 route 不允许直接修改原始请求头中的 User-Agent(底层 Chromium 禁止),你只能通过 route.continue_(headers=...) 全量替换 headers —— 这意味着你得自己补全其他必要头(如 Accept、Sec-Fetch-* 等),否则可能触发 400 或 CORS 拒绝。

立即学习“Python免费学习笔记(深入)”;

  • 务必保留原始 headers 中除 User-Agent 外的关键字段,建议先 route.fetch 获取原始 headers 再修改
  • 匹配路径用 glob 或正则,避免过度匹配(例如 "**/api/**" 比 "**" 更安全)
  • 该方式无法影响 page.goto 加载的主文档请求(因为 route 设置太晚),除非配合 context.route + 提前启动上下文

为什么 setExtraHTTPHeaders 对 UA 无效?

Playwright 的 page.set_extra_http_headers 看似能加 header,但它明确排除了 User-Agent、Connection、Host 等受控头——这是 Chromium 的硬性限制,不是 Playwright 的 bug。调用后不会报错,但 UA 完全不会变化。

Agent Team Skill
Agent Team Skill

管理AI智能体团队成员,包括角色分配、技能配置和任务委托。适用场景:列出团队成员、添加/更新智能体、设置团队负责人等。

下载

常见误操作:在 page.goto 后调用 set_extra_http_headers,以为能影响后续请求。实际上它只对之后由脚本发起的 fetch/XMLHttpRequest 生效(且仍不支持 UA)。

  • 有效场景:给 JS 发起的 fetch("/api/data") 添加 X-Api-Version 这类自定义头
  • 无效场景:试图覆盖页面导航、图片/CSS/JS 加载、或者任何浏览器自动发起的请求的 User-Agent
  • 替代方案:真要动态切 UA,只能重建 context 或 browser 实例(开销大,慎用)

移动端 UA 和设备模拟别混用

很多人想设移动端 UA,就直接填个手机 UA 字符串。但光改 UA 不够:缺少 viewport、touch 事件支持、User Agent 中的 Mobile 标识可能被忽略,甚至某些站点会检查 maxTouchPoints 或 platform。

正确做法是用 Playwright 内置的设备参数,它会自动配齐 UA、viewport、userAgentMetadata、hasTouch 等:

from playwright.sync_api import sync_playwright
from playwright.sync_api import devices
<p>with sync_playwright() as p:
iphone = devices["iPhone 13"]
browser = p.webkit.launch()
context = browser.new_context(**iphone)  # 自动带 Mobile UA 和 touch 支持
page = context.new_page()
page.goto("<a href="https://www.php.cn/link/7ac09a39f051ff62eefbafd363b1bbb3">https://www.php.cn/link/7ac09a39f051ff62eefbafd363b1bbb3</a>")

自行拼接移动端 UA 容易漏掉 Sec-CH-UA-Mobile 这类 Client Hints,而设备模板会一并处理。真要微调 UA,也在设备配置基础上改 user_agent 字段,不要从零手写。

UA 是个表面简单、实则牵一发而动全身的配置项。浏览器内核限制、服务端 UA 检查逻辑、Client Hints 新标准、以及 Playwright 各层 API 的作用域差异,都会让“改个 UA”变得不那么直觉。动手前先想清楚:你要覆盖的是哪一类请求?是否需要连带 viewport/touch 一起模拟?有没有服务端在验 Sec-CH-UA?这些比代码多写一行更重要。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1771

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4624

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1749

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

27357

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3307

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3307

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1203

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn