main.js
const pptr = require("puppeteer");const gotoUrl = "http://127.0.0.1:5500/index.html";(async () => { const browser = await pptr.launch({ headless: false, slowMo: 250, }); const page = await browser.newPage(); page.on("console", msg => { console.log(msg.text()); }); await page.goto(gotoUrl); // 文本框 await page.type("#username", "ajanuw", { delay: 100 }); await page.type("#password", "@asd1234", { delay: 100 }); const usernameValue = await page.$eval("#username", el => el.value); const passwordValue = await page.$eval("#password", el => el.value); // 单选表单 await page.click("input[type=radio][name=gender]#female"); const genderValue = await page.$$eval( "input[type='radio'][name='gender']", els => { return Array.from(els).filter(el => el.checked)[0].value; } ); // 单选select 第二个参数为option的value await page.select("select#address", "1"); const addressValue = await page.$eval("select#address", el => el.value); // 多选 select await page.select("select[name=multiple]", "1", "3"); const multipleValues = await page.$eval( "select[name=multiple]", el => el.value ); // 多选表单 await page.click("input[type=checkbox][name=photography]"); await page.click("input[type=checkbox][name=reading]"); const hobby = await page.$(".hobby"); const hobbyValues = await hobby.$$eval("input[type=checkbox]", els => { els = Array.from(els); return els.filter(el => el.checked).map(el => el.value); }); // 文件 // await page.click("input[type=file][name=avatar]#avatar"); const fileEl = await page.$("input[type=file][name=avatar]#avatar"); fileEl.uploadFile("./a.jpg"); const avatarValue = await page.$eval( "input[type=file][name=avatar]#avatar", e => { // error: e.target.files return { value: e.value, name: e.files[0].name, size: e.files[0].size, }; } ); // textarea await page.type("textarea[name=introduction]", "0 error, 0 warning. :)", { delay: 10, }); const selfIntroductionValue = await page.$eval( "textarea[name=introduction]", e => e.value ); // await page.click(".submit"); console.log({ usernameValue, passwordValue, genderValue, multipleValues, addressValue, hobbyValues, avatarValue, selfIntroductionValue, }); await browser.close();})();
index.html
puppeteer 多选
run
$ node main.jsLive reload enabled.Failed to load resource: the server responded with a status of 404 (Not Found){ usernameValue: 'ajanuw', passwordValue: '@asd1234', genderValue: '2', multipleValues: '1', addressValue: '1', hobbyValues: [ '足球', '摄影', '看书' ], avatarValue: { value: 'C:\\fakepath\\a.jpg', name: 'a.jpg', size: 8015 }, selfIntroductionValue: '0 error, 0 warning. :)' }