使用Playwright Node.js爬取本地HTML文件标题报ERR_FILE_NOT_FOUND如何解决
问题根因
- 路径转义错误:JavaScript字符串中
\为转义字符,你直接写的C:\Users\weske\Desktop\WebScraping\index.html中所有路径分隔符被转义,最终传递的路径和报错中显示的无分隔符路径一致,导致找不到文件。 - 缺少本地文件协议:访问本地文件必须添加
file://协议头,否则Playwright会将路径识别为网络地址请求,自然无法找到资源。 - 未捕获异步异常:异步函数
main()执行时没有添加异常捕获逻辑,触发报错后会抛出未处理Promise拒绝的警告。
修复方案
你可以选择任意一种路径处理方式,两种都可以正常运行:
方式1:直接写转义后的完整路径(简单快捷)
将page.goto的参数修改为带协议头、转义后的路径即可:
await page.goto('file://C:/Users/weske/Desktop/WebScraping/index.html'); // 也可以用转义反斜杠的写法:await page.goto('file://C:\\Users\\weske\\Desktop\\WebScraping\\index.html');
方式2:用path模块自动处理路径(兼容性更好,适配不同操作系统)
完整修改后的代码如下:
import playwright from "playwright"; import path from "path"; import { fileURLToPath } from "url"; // ES模块环境下获取当前脚本所在目录,CommonJS环境可直接使用__dirname const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); async function main() { const browser = await playwright.chromium.launch({ headless: true }); const page = await browser.newPage(); // 自动拼接本地文件路径和协议头 const localHtmlUrl = `file://${path.join(__dirname, 'index.html')}`; await page.goto(localHtmlUrl); const title = await page.title(); console.log(title); await page.waitForTimeout(5000); await browser.close(); } // 添加异常捕获逻辑,避免未处理的Promise报错 main().catch(err => console.error('运行错误:', err));
修改完成后运行代码即可正常输出本地HTML文件的标题。
内容的提问来源于stack exchange,提问作者Aliayub Ali
相关产品推荐
相关产品推荐

