如何利用Puppeteer实现表单自动化填充并从CSV文件提取特定字段值
解决方案:CSV/Excel读取、Puppeteer表单填充与JSON字段提取
1. 如何将CSV/Excel文件中的数据读取到代码中?
处理CSV文件
你已经在用的convert-csv-to-json库就很实用,除此之外,也可以试试更轻量的csv-parser库,用法如下:
const fs = require('fs'); const csv = require('csv-parser'); const results = []; fs.createReadStream('Book1.csv') .pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { console.log(results); // 输出转换后的JSON数组 });
处理Excel文件
如果要读取.xlsx或.xls格式的Excel文件,推荐用xlsx库:
- 先安装依赖:
npm install xlsx - 读取示例代码:
const XLSX = require('xlsx'); const workbook = XLSX.readFile('Book1.xlsx'); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; const jsonData = XLSX.utils.sheet_to_json(worksheet); console.log(jsonData); // 输出Excel转换后的JSON数组
2. 使用Puppeteer从CSV获取数据填充指定表单
结合你已经实现的CSV转JSON逻辑,这里给你一套完整的自动化填充代码。先确保已经安装puppeteer:npm install puppeteer
完整代码如下:
const csvToJson = require('convert-csv-to-json'); const puppeteer = require('puppeteer'); (async () => { // 1. 读取CSV并转成JSON格式 const jsonData = csvToJson.getJsonFromCsv("Book1.csv"); // 2. 启动Puppeteer浏览器(headless:false可以看到可视化操作) const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); // 3. 循环处理每一条数据 for (const item of jsonData) { await page.goto('https://forms.gle/UUQUgTm9tpmrGSnF8'); // 等待表单加载完成,定位输入框并填充数据 await page.waitForSelector('input[type="text"]'); // 填充各个字段(注意:选择器是基于Google表单的aria-label属性,若表单更新需调整) await page.type('div[aria-label="FirstName"] input', item.FirstName); await page.type('div[aria-label="Number"] input', item.Number); await page.type('div[aria-label="Address"] input', item.Address); await page.type('div[aria-label="Country"] input', item.Country); // 提交表单 await page.click('div[role="button"][aria-label="提交"]'); // 等待提交跳转完成 await page.waitForNavigation(); } // 关闭浏览器 await browser.close(); })();
小提示:如果Google表单的选择器发生变化,你可以按F12打开开发者工具,直接查看输入框的
aria-label属性来调整选择器。
3. 从转换后的JSON中提取特定字段值
你已经得到了{ FirstName: 'meliz', Number: '123', Address: 'High Road', Country: 'US' }这样的对象,提取字段超级简单,直接用点语法或者方括号语法就行:
比如在你的循环里可以这么写:
const csvToJson = require('convert-csv-to-json') const json = csvToJson.getJsonFromCsv("Book1.csv"); for(let i=0; i<json.length;i++){ // 用点语法提取FirstName const firstName = json[i].FirstName; // 用方括号语法提取Number(适合字段名带特殊字符的情况) const number = json[i]['Number']; console.log(`当前用户:${firstName},联系方式:${number}`); }
这样就能轻松拿到你需要的字段值啦!
内容的提问来源于stack exchange,提问作者meliz
相关产品推荐
相关产品推荐

