puppeteer 填充基础表单

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

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=2.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>puppeteer</title>
  </head>
  <body>
    <input type="text" id="username" /> <br />
    <input type="text" id="password" type="password" /> <br />
    <div>
      <input type="radio" name="gender" id="male" value="1" checked />
      <label for="male">男</label>

      <input type="radio" name="gender" id="female" value="2" />
      <label for="female">女</label>
    </div>
    <div>
      <h3>地址</h3>
      <select name="address" id="address">
        <option value="0">请选择...</option>
        <option value="1">北京</option>
        <option value="2">上海</option>
        <option value="3">成都</option>
      </select>
    </div>
    <div>
      <h3>多选</h3>
      <select name="multiple" id="multiple" multiple>
        <option value="0">请选择...</option>
        <option value="1">java</option>
        <option value="2">javascript</option>
        <option value="3">node</option>
      </select>
    </div>
    <div class="hobby">
      <h3>爱好</h3>
      足球<input type="checkbox" name="football" value="足球" checked />|
      篮球<input type="checkbox" name="basketball" value="蓝球" />| 摄影<input
        type="checkbox"
        name="photography"
        value="摄影"
      />| 看书<input type="checkbox" name="reading" value="看书" />|
    </div>
    <div>
      <h3>头像</h3>
      <input type="file" name="avatar" id="avatar" />
    </div>
    <div>
      <h3>自我介绍</h3>
      <textarea name="introduction" id="" cols="30" rows="10"></textarea>
    </div>
    <br />
    <button class="submit">提交</button>
    <script>
      const qs = s => document.querySelector(s);

      qs(".submit").addEventListener("click", () => {
        console.log(qs("#username").value);
        console.log(qs("#password").value);
        const radios = Array.from(
          document.querySelectorAll("input[type=radio][name=gender]")
        );
        const checked = radios.filter(el => el.checked)[0];
        console.log(checked.value);
        console.log(qs("#address").value);
      });

      qs("#avatar").addEventListener("change", e => {
        const files = qs("#avatar").files;
        // console.log(files);
        // console.log(qs("#avatar").value);
      });
    </script>
  </body>
</html>

run

$ node main.js
Live 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. :)' }

原文地址:https://www.cnblogs.com/ajanuw/p/10312073.html

时间: 2024-10-13 21:55:20

puppeteer 填充基础表单的相关文章

HTML基础表单

HTML基础表单 1.表单标签 标签 描述 form:定义供用户输入的表单 input:定义输入域 textarea :定义文本域 (一个多行的输入控件) label :定义一个控制的标签 fieldset :定义域 legend :定义域的标题 select:定义一个选择列表 option :定义下拉列表中的选项 button :定义一个按钮 hoden:隐藏 submit:自带提交按钮 reset:重置 date:日期 radio:单选 checkbox:复选 number:数字 email

bootstrap 基础表单 内联表单 横向表单

<!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="dist/css/bootstrap.css"> </head> <body> <p c

Bootstrap系列 -- 11. 基础表单

表单主要功能是用来与用户做交流的一个网页控件,良好的表单设计能够让网页与用户更好的沟通.表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等.其中每个控件所起的作用都各不相同,而且不同的浏览器对表单控件渲染的风格都各有不同. <form role="form"> <div class="form-group"> <label for="exampleInputEmail1">邮箱

使用jQuery将数据快速填充到表单

作为WEB程序员,我们经常与表单打交道.例如在通过表单编辑一些数据时,读取后台数据并填充到表单是一件繁琐的事情,尤其是表单域很多而且包含radio,checkbox,select等的时候.你一定见过下面的代码: <select name="area"> <option value="nankai" <?php if($area=='nankai') echo 'selected="selected"';?>>南

Java 创建、填充PDF表单域

表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法.这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充.此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改.编辑. 要点概括: 1.创建表单域 2.填充表单域 3.设置表单域只读 工具:Free Spire.PDF for

【转】Java创建填充pdf表单域

表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法.这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充.此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改.编辑. 要点概括: 1.创建表单域 2.填充表单域 3.设置表单域只读 工具: Free Spire.PDF fo

h5标签基础 表单form

表单:收集用户信息 一. 组成: 文本框<input type="text"/> 密码框<input type="password"/> 单选框<input type="radio"/> 多选<input type="checkbox"/> 基础下拉框: <select> <option></option> </select> 多选

JavaScript:基础表单验证

在用户填写表单的过程之中,往往需要编写一堆的验证操作,这样就可以保证提交的数据时正确的.那么下面就模拟表单验证的处理操作完成. 如果要想进行验证,首先针对于输入的数据来进行一个验证处理. 1.定义一个基础的表单(从标准来讲每一个元素都一定要存在有一个ID属性) <form action="pass.html" method="post" id="loginForm"> <!--在以后的开发过程之中,必须要保证id与name属性内

Chrome 自动填充的表单是淡黄色的背景怎么办!

chrome浏览器自动填充表单的黄色背景高亮(#FAFFBD)一直困扰着我,我之前没想着理它,可是最近一个登陆框,需要用到图标,于是我草率的直接设置在input元素里面,结果问题就来了,很难看很难看,因此还是总结一下. 这个问题,在2008年的时候就已经存在了,隔了好几年了,在chromium上面可以找到 Issue 46543,但是官方好像没有理这个问题,英文没怎么看懂,谁理解的,可以给大家分享一下. 思路一: 打补丁 Webkit内核的浏览器有一个-webkit-autofill私有属性,