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

胖磊小哥_8443

胖磊小哥_8443

2026-10-21

758人浏览

原创

最稳妥方式是通过 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()</p>

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

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

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

  • 务必保留原始 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>")</p>

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

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

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python agent playwright

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.07.20

1771

4

python能做什么
python能做什么

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

2023.07.25

4644

7

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

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

2023.07.31

1749

3

python教程
python教程

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

2023.08.03

27537

23

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

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

2023.08.04

3327

5

python eval
python eval

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

2023.08.04

3327

5

scratch和python区别
scratch和python区别

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

2023.08.11

1203

5

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

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

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2583

5

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共0课时 | 0人学习

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

共0课时 | 0人学习