使用 Puppeteer 如何从目录上传随机文件并将其删除?

Posted

技术标签:

【中文标题】使用 Puppeteer 如何从目录上传随机文件并将其删除?【英文标题】:With Puppeteer How To Upload Random Files From A Directory and Delete It? 【发布时间】:2022-01-17 18:22:42 【问题描述】:

我想用node js写一个puppeteer脚本,从一个目录上传一个随机文件到服务器并删除它。

这是网站中的 html 代码:

<form action="/server.php">
  <input type="file" id="myFile" name="filename">
  <input type="submit">
</form>

所以现在我需要从目录上传一个图像文件(但我不知道图像名称),然后我需要从目录中删除该文件。

这是我当前的 puppeteer 代码:

//UPLOAD A PICTURE
const fileName = 'dont-know-the-name.png';
const picInput = await page.$('#myFile');
await picInput.uploadFile(fileName);

【问题讨论】:

【参考方案1】:

实际上,负责上传文件的是Puppeteer's ElementHandle.uploadFile() method.。您可能希望使用 Node 的 fs.readDir() 获取目录中文件的数组,获取随机元素,然后使用 fs.unlink() 删除它。

这是一个实现:

const dir = "YOUR/DIR/PATH";
const rnd = (arr) => arr[Math.floor(Math.random() * arr.length)];
const rndFile = () => `$dir/$rnd(fs.readdirSync(dir))`;

(async () => 
    const browser = await puppeteer.launch(headless: false);
    const page = await browser.newPage();
    await page.goto("YOUR/UPLOAD/URL")
    
  const file = rndFile();
  const elementHandle = await page.$("input[type=file]");
  await elementHandle.uploadFile(file);
  await page.click("input[type=submit]")
  
  fs.unlinkSync(file)
)();

【讨论】:

以上是关于使用 Puppeteer 如何从目录上传随机文件并将其删除?的主要内容,如果未能解决你的问题,请参考以下文章

php之上传小案例,根据时间:月日分创建目录并随机生成文件名

如何使用无头使用 puppeteer 下载文件:真的?

如何使用Puppeteer拍摄包含视频的页面的屏幕截图

Puppeteer:如何存储会话(包括 cookie、页面状态、本地存储等)并稍后继续?

从 Puppeteer 中的 page.evaluate 获取元素?

如何使用 NodeJS 和 puppeteer 从 udemy 抓取图像