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

如何使用Puppeteer从指定目录上传随机图片并删除?解决fs.readdirSync报错

问题解决:Puppeteer随机上传图片并删除,修复fs.readdirSync is not a function报错

报错原因

你碰到的fs.readdirSync is not a function错误,根源是两个核心问题:

  • 未导入Node.js内置的fs文件操作模块
  • 没有定义dir变量来指定你的图片目录路径

完整修正代码

结合你的需求(随机选图、上传后删除、触发元素为.om3e55n1),修正后的可运行代码如下:

// 导入必要模块
const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');

// 定义图片目录(用path模块处理Windows路径,避免转义错误)
const dir = path.resolve('C:\\Users\\username\\Desktop\\mpimages');

// 随机选取数组元素
const pickRandom = (arr) => arr[Math.floor(Math.random() * arr.length)];

// 获取随机图片路径,过滤非图片文件
const getRandomImage = () => {
    const files = fs.readdirSync(dir).filter(file => 
        ['.jpg', '.jpeg', '.png', '.gif'].includes(path.extname(file).toLowerCase())
    );
    if (files.length === 0) {
        throw new Error('图片目录为空,请检查路径或文件');
    }
    return path.join(dir, pickRandom(files));
};

(async () => {
    let browser;
    try {
        browser = await puppeteer.launch({headless: false});
        const page = await browser.newPage();
        await page.goto("YOUR/UPLOAD/URL");

        // 点击触发上传的div元素
        await page.click('.om3e55n1');

        // 等待并找到隐藏的文件上传input
        const fileInput = await page.waitForSelector('input[type=file]', {visible: false});
        const targetFile = getRandomImage();
        
        // 执行文件上传
        await fileInput.uploadFile(targetFile);
        
        // 可选:等待上传完成(根据页面实际情况调整,比如等待成功提示)
        // await page.waitForSelector('.upload-success-indicator');
        
        // 可选:点击提交按钮(如果页面需要手动提交)
        // await page.click("input[type=submit]");

        // 上传完成后删除原文件
        fs.unlinkSync(targetFile);
        console.log(`已删除上传文件:${targetFile}`);
    } catch (error) {
        console.error('操作出错:', error.message);
    } finally {
        // 确保浏览器正常关闭
        if (browser) await browser.close();
    }
})();

关键修正说明

  • 模块导入:添加fs和path模块导入,path用于处理跨平台路径,避免Windows路径的转义问题。
  • 路径处理:用path.resolve和path.join处理路径,替代手动拼接,减少错误。
  • 图片过滤:增加文件后缀过滤逻辑,确保只选取图片格式的文件。
  • 异常处理:添加try/catch/finally块,处理空目录、页面加载失败等异常场景,保证浏览器能正常关闭。
  • 上传触发:先点击.om3e55n1的div元素,再操作对应的隐藏文件input,适配网站的上传交互逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:10:34