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

Electron调用Puppeteer访问有效URL报无效URL错误如何解决?

核心问题原因

你代码的错误出在Electron主进程item:add事件的处理逻辑中:你对IPC通道传递过来的URL参数item额外调用了JSON.stringify(),该操作会给原始URL字符串的首尾添加双引号,最终传入Puppeteer的URL格式变成了"https://www.amazon.ca/xxx",带引号的字符串不符合URL规范,因此Puppeteer抛出Cannot navigate to invalid URL错误。
你可以自行打印link的值验证,会发现它和测试文件中直接传入的纯URL字符串格式完全不一致。

修复方案

直接删除JSON.stringify调用即可,IPC传递的item本身就是原始URL字符串,不需要额外序列化。修改后的对应代码段如下:

ipcMain.on('item:add', function(e, item){
    const link = item; // 移除多余的JSON.stringify调用
    console.log(link);
    const name = scraper.getname(link);
    name.then(function(result){
        console.log(result);
        mainWindow.webContents.send('item:add', result);
    }).catch(err => { // 新增错误捕获,避免未处理的Promise rejection报错
        console.error('抓取失败:', err);
    })
    addWindow.close();
});
其他优化建议
  1. 防反爬配置:亚马逊有较强的反爬机制,默认配置的Puppeteer很容易被识别,你可以修改scrape.js中的启动参数降低被拦截的概率:
const browser = await puppeteer.launch({
  headless: 'new',
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--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'
  ]
});
  1. 所有异步操作都需要添加错误捕获,避免未处理的Promise rejection导致程序崩溃。
  2. 你代码中多处将result拼写为resualt,建议修正避免后续维护出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:24:01