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

使用Playwright提取特定页面pageContent为空,如何获取目标URL的Body内容?

问题:Playwright抓取特定页面时pageContent为空的解决方法

用户提供的Playwright抓取代码:

import {chromium}  from 'playwright'; // Web scraper Library
import * as fs from 'fs';

(async function () {
    const chromeBrowser = await chromium.launch({ headless: true }); // Chromium launch and options
    const context = await chromeBrowser.newContext({ ignoreHTTPSErrors: true ,
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
      });
    const page = await context.newPage();
    await page.goto("https://jp.abcmouse.com/mkt/privacy/", { waitUntil: 'load', timeout: 60000 });
    let content = await page.content();
    fs.writeFileSync('test.html', content);
    console.log("done")
})();

问题描述:上述代码可成功提取多数网页内容,但抓取https://jp.abcmouse.com/mkt/privacy/这类特定页面时,提取的pageContent为空,如何获取该URL的Body内容?针对这类特殊网站,是否需采取特定处理措施?


解决措施

1. 调整页面等待策略

现代网站多依赖JS动态渲染内容,waitUntil: 'load'仅等待初始资源加载完成,可能早于页面实际内容生成。可替换为更合适的等待条件:

// 等待网络空闲(500ms内无新网络请求)
await page.goto("https://jp.abcmouse.com/mkt/privacy/", { waitUntil: 'networkidle', timeout: 60000 });
// 或等待页面关键元素加载完成(比如隐私政策正文容器,可根据实际页面结构调整选择器)
await page.waitForSelector('body', { timeout: 60000 });
let content = await page.content();

2. 模拟更真实的浏览器环境

部分网站会识别无头浏览器特征,可通过以下方式规避:

// 使用Playwright新无头模式(更接近真实浏览器)+ 禁用自动化检测
const chromeBrowser = await chromium.launch({ 
    headless: 'new', 
    args: ['--disable-blink-features=AutomationControlled'] 
});

// 同时更新UA为较新版本(避免因UA过旧被拦截)
const context = await chromeBrowser.newContext({ 
    ignoreHTTPSErrors: true,
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
});

3. 直接获取Body内容

若page.content()仍为空,可跳过完整HTML结构,直接提取Body的内部内容:

// 获取Body的innerHTML
let bodyContent = await page.$eval('body', el => el.innerHTML);
// 或获取纯文本内容
let bodyText = await page.$eval('body', el => el.textContent);
fs.writeFileSync('test-body.html', bodyContent);

4. 处理会话与Cookie

部分网站需要Cookie或会话状态才能展示内容,可启用持久化存储复用会话:

// 创建上下文时指定存储路径,保存/加载Cookie和本地存储
const context = await chromeBrowser.newContext({ 
    ignoreHTTPSErrors: true,
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    storageState: './storageState.json'
});

首次运行后生成storageState.json,后续运行可直接复用该文件中的会话信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:50:39