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

Python爬虫遭遇Service Worker页面,如何获取目标网页响应?

解决requests爬取返回Service Worker安装页面的问题

你用requests.get请求目标URL时,返回的始终是Service Worker安装页面,哪怕加了请求头也没用。从你提供的页面代码能看出,这个网站的逻辑是:首次访问(不管请求哪个资源)都会返回这个安装页面,页面里的JS会注册Service Worker,然后自动刷新页面,这时候网站才会返回真实内容。

但requests是纯HTTP请求工具,不会执行JS,也没有浏览器的Service Worker环境,所以网站一直判定你是首次访问,反复返回安装页面。下面给两种解决方法:

方法一:用支持JS渲染的工具模拟浏览器访问

这是最靠谱的方案,因为只有真实浏览器环境能完成Service Worker的注册流程,让网站认为你已经完成首次访问。比如用Playwright:

  1. 先安装Playwright和浏览器驱动:
pip install playwright
playwright install chromium
  1. 编写代码:
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头浏览器(要可视化可加headless=False)
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    # 访问目标URL
    page.goto(base_url)
    # 等待页面加载完成(networkidle表示网络请求基本停止)
    page.wait_for_load_state("networkidle")
    # 获取页面内容
    content = page.content()
    print(content)
    browser.close()

Playwright会自动执行页面里的JS,完成Service Worker注册,页面刷新后就能拿到真实的目标内容。

方法二:模拟已完成注册的请求状态

网站可能用Cookie来标记用户是否已经完成Service Worker注册,你可以试试从浏览器里复制Cookie带到requests请求中:

  1. 打开Chrome/Firefox,访问目标URL,等页面加载完成后按F12打开开发者工具;
  2. 切换到「Application」标签,找到「Cookies」,复制所有Cookie的键值对,拼成Cookie字符串;
  3. 在requests请求中带上Cookie和完整的浏览器请求头:
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Cookie': '这里填你从浏览器复制的Cookie字符串'
}

response = requests.get(base_url, headers=headers)
if response.status_code == 200:
    content = response.content.decode('utf-8')
    print(content)

这种方法的缺点是Cookie可能过期,或者网站还有其他验证逻辑(比如SessionStorage的标记),不一定能长期生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:59:52