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

如何在Puppeteer的page.evaluate方法中正常加载并使用jQuery?

你遇到的jQuery加载失败通常有两个核心原因:

  • 目标站点开启了内容安全策略(CSP),禁止从外部CDN加载未被信任的脚本资源
  • 你使用的jQuery CDN地址在爬取环境下网络访问不通,或者加载完成后站点全局的$符号被其他框架占用

修复方案

方案1:绕过CSP拦截(最常用)

在创建页面后、跳转目标URL前,添加绕过CSP的配置,避免外部脚本被拦截:

let page = await browser.newPage();
// 新增下面这行,绕过页面的内容安全策略
await page.setBypassCSP(true);
await page.goto(url, {waitUntil: 'networkidle2'});

如果修改后还是报错,改用本地注入jQuery的方案,完全不依赖外部CDN。

方案2:本地注入jQuery(无外部依赖,稳定性最高)

提前把jQuery的min版源码保存到本地同目录下的jquery.min.js文件,然后用path参数加载本地文件,避免CDN访问失败的问题:

await page.addScriptTag({path: './jquery.min.js'});

如果不想保存本地文件,也可以直接把jQuery的min版源码作为字符串传入content参数:

// jqueryContent为jQuery 3.2.1 min版的完整源码字符串
await page.addScriptTag({content: jqueryContent});

方案3:兼容$符号冲突

如果站点本身已经加载了Prototype等占用$符号的库,可以在evaluate内部优先做兼容判断,避免调用失败:

await page.evaluate( () => {
    // 优先用$,如果$不是jQuery就用jQuery全局对象
    const $ = window.$ || window.jQuery;
    var classes = $( "td:contains('Lec')")
    classes = classes.not('.Comments')
    classes = classes.not('.Pct100')
    classes = Array.from(classes)
});

完整可运行代码

const puppeteer = require('puppeteer');

(async() => {
  let url = "[你正在爬取的网站地址]"
  let browser = await puppeteer.launch({headless:false});
  let page = await browser.newPage();
  // 绕过CSP,避免注入脚本被拦截
  await page.setBypassCSP(true);
  await page.goto(url, {waitUntil: 'networkidle2'});
  // 加载本地jQuery文件
  await page.addScriptTag({path: './jquery.min.js'})
  await page.evaluate( () => {
      const $ = window.$ || window.jQuery;
      var classes = $( "td:contains('Lec')")
      classes = classes.not('.Comments')
      classes = classes.not('.Pct100')
      classes = Array.from(classes)
      // 后续处理逻辑
  });
  await browser.close();
})();

内容的提问来源于stack exchange,提问作者Daniel-G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:06:03