Puppeteer+Express爬取YouTube时Chromium崩溃问题求助
解决Puppeteer访问YouTube崩溃的问题
我正在学习Puppeteer,想要爬取YouTube搜索“data science”结果页(链接:https://www.youtube.com/results?search_query=data+science)的视频链接。目前其他网站均可正常访问,但访问YouTube时Chromium浏览器会崩溃,无法打开该链接。使用的技术栈为Express JS和Puppeteer,相关代码如下:
const express = require("express"); const puppeteer = require("puppeteer"); const cors = require("cors"); const app = express(); app.use(cors()); app.get("/scrapVideo", async (req, res) => { const browser = await puppeteer.launch({ headless: false, }); const page = await browser.newPage(); await page.goto("https://www.youtube.com"); await page.screenshot({ path: "youtube.png" }); await browser.close(); res.send("working"); }); app.listen(3300);

仅YouTube网站出现此崩溃问题,以下是可行的解决办法:
调整浏览器启动参数
YouTube对无头浏览器有检测,且默认Chromium配置可能不足以承载其复杂页面,修改puppeteer.launch的配置:
const browser = await puppeteer.launch({ headless: "new", // 使用新版无头模式,兼容性更好 args: [ "--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage", // 解决内存不足导致的崩溃 "--disable-accelerated-2d-canvas", "--no-first-run", "--disable-gpu" ] });
模拟真实用户代理
添加真实浏览器的UA,避免被识别为爬虫:
在page.goto前插入:
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
优化页面加载配置
YouTube资源加载量大,延长超时时间并等待网络空闲:
await page.goto("https://www.youtube.com/results?search_query=data+science", { timeout: 60000, // 设置60秒超时 waitUntil: "networkidle2" // 等待网络请求数降至2个以下再继续 });
更新依赖版本
旧版Puppeteer可能与YouTube页面不兼容,执行更新命令:
npm update puppeteer
内容的提问来源于stack exchange,提问作者Deepak Daniel Jesu Doss
相关产品推荐
相关产品推荐

