新闻详情

新闻详情

首页 / 资讯中心 / 详情

Puppeteer AutofillAddressField 枚举详解:用 ElementHandle.autofill 驱动浏览器原生地址/信用卡自动填充

发布时间:2026/9/8 16:19:17来源:尧图网络
Puppeteer AutofillAddressField 枚举详解:用 ElementHandle.autofill 驱动浏览器原生地址/信用卡自动填充
Puppeteer AutofillAddressField 枚举详解用 ElementHandle.autofill 驱动浏览器原生地址/信用卡自动填充【免费下载链接】puppeteerJavaScript API for Chrome and Firefox项目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteerAutofillAddressField是 Puppeteer 为表单自动填充Autofill能力提供的一组受支持的地址字段名常量枚举它配合ElementHandle.autofill()方法与AutofillData数据结构让自动化脚本能够调用 Chrome 的原生 Autofill 引擎一次性填充收货地址、姓名、电话等表单字段。读完本文你将掌握该枚举全部 16 个成员的取值、autofill()的完整调用方式、底层 CDPAutofill.trigger的调用链以及仓库测试中经过验证的实战示例。枚举定义支持的自动填充地址字段AutofillAddressField 的官方文档定义非常简洁Supported autofill address field names.受支持的自动填充地址字段名。它在源码中是一个 TypeScriptconst enum定义于 ElementHandle.tsexport const enum AutofillAddressField { NameFirst NAME_FIRST, NameMiddle NAME_MIDDLE, NameLast NAME_LAST, NameFull NAME_FULL, EmailAddress EMAIL_ADDRESS, PhoneHomeNumber PHONE_HOME_NUMBER, PhoneHomeCityAndNumber PHONE_HOME_CITY_AND_NUMBER, PhoneHomeWholeNumber PHONE_HOME_WHOLE_NUMBER, AddressHomeLine1 ADDRESS_HOME_LINE1, AddressHomeLine2 ADDRESS_HOME_LINE2, AddressHomeStreetAddress ADDRESS_HOME_STREET_ADDRESS, AddressHomeCity ADDRESS_HOME_CITY, AddressHomeState ADDRESS_HOME_STATE, AddressHomeZip ADDRESS_HOME_ZIP, AddressHomeCountry ADDRESS_HOME_COUNTRY, }与官方 API 文档中的枚举成员表一致完整取值如下按字段类别分组成员字符串值字段类别NameFirstNAME_FIRST姓名NameMiddleNAME_MIDDLE姓名NameLastNAME_LAST姓名NameFullNAME_FULL姓名EmailAddressEMAIL_ADDRESS邮箱PhoneHomeNumberPHONE_HOME_NUMBER电话PhoneHomeCityAndNumberPHONE_HOME_CITY_AND_NUMBER电话PhoneHomeWholeNumberPHONE_HOME_WHOLE_NUMBER电话AddressHomeLine1ADDRESS_HOME_LINE1地址行AddressHomeLine2ADDRESS_HOME_LINE2地址行AddressHomeStreetAddressADDRESS_HOME_STREET_ADDRESS街道地址AddressHomeCityADDRESS_HOME_CITY城市AddressHomeStateADDRESS_HOME_STATE省份/州AddressHomeZipADDRESS_HOME_ZIP邮编AddressHomeCountryADDRESS_HOME_COUNTRY国家这些字符串值直接对应 Chromium 地址字段类型源码注释中指向 Chromium 的field_types.cc也就是说该枚举本质上是在 Puppeteer API 层对 Chrome Autofill 引擎的字段类型命名空间做了一层类型安全封装。需要说明的是因为const enum会在编译期内联为字符串字面量运行时并不存在AutofillAddressField这个对象。因此在实际使用中你既可以import { AutofillAddressField } from puppeteer后以AutofillAddressField.AddressHomeCity的形式引用也可以直接写字符串ADDRESS_HOME_CITY——两者在类型层面等价后文类型定义中会解释原因。AutofillData枚举在数据结构中的位置AutofillAddressField并不是孤立使用的它是 AutofillData 联合类型中address分支的核心组成部分。该类型定义于 ElementHandle.tsexport type AutofillData | { /** Autofill.CreditCardCDP 协议类型 */ creditCard: { number: string; name: string; expiryMonth: string; expiryYear: string; cvc: string; }; address?: never; } | { /** Autofill.AddressCDP 协议类型 */ address: { fields: Array{ /** 字段类型完整列表见 Chromium field_types */ name: AutofillAddressField | (string Recordnever, never); value: string; }; }; creditCard?: never; };从源码结构看这段类型设计有三个值得注意的点互斥的联合分支address?: never与creditCard?: never相互约束保证一次autofill()调用只能提供信用卡数据或地址数据之一不会两者混传。枚举优先、字符串兜底name的类型是AutofillAddressField | (string Recordnever, never)。Recordnever, never是一个空对象类型这个惯用写法的效果是传入 16 个枚举值时获得完整的类型提示传入任意其他字符串时依然合法但会失去自动补全会高亮提示。这样设计的原因正是源码注释所指出的——Chromium 侧支持的字段类型远多于这 16 个Puppeteer 只为最常用的地址字段提供了枚举并未关闭扩展空间。value均为字符串与信用卡分支一致包括邮编、月/年在内的所有值都以字符串传递与 CDPAutofill.Address协议的Field{name, value}数组结构一一对应。ElementHandle.autofill()调用入口与支持边界枚举和数据结构最终都服务于抽象方法ElementHandle.autofill(data: AutofillData): Promisevoid其声明与文档注释位于 ElementHandle.ts。该方法的 TSDoc 描述为Callsautocompleteon the element. Throws an error if the element is not an input, select, or textarea. It can be used to test if the form is compatible with the browsers autofill implementation. Throws an error if the form cannot be autofilled.即对选中的元素触发浏览器自动补全如果元素不是input/select/textarea或表单与浏览器 Autofill 实现不兼容会抛出错误。文档同时给出了信用卡填充的官方示例// Select an input on the credit card form. const name await page.waitForSelector(form #name); // Trigger autofill with the desired data. await name.autofill({ creditCard: { number: 4444444444444444, name: John Smith, expiryMonth: 01, expiryYear: 2030, cvc: 123, }, });关于支持范围该方法注释写明 Currently, Puppeteer supports auto-filling credit card information only and in Chrome in the new headless and headful modes only当前仅在 Chrome 的新 headless 与 headful 模式下支持自动填充信用卡信息。不过值得注意的是虽然注释措辞仅提及信用卡AutofillData联合类型中address分支与AutofillAddressField枚举的存在以及下文仓库测试用例的实际验证都表明地址自动填充同样是可用的能力路径。更多 API 细节可参见 ElementHandle.autofill 的文档页。底层调用链DOM.describeNode → Autofill.triggerCDP 连接下的具体实现在 cdp/ElementHandle.tsoverride async autofill(data: AutofillData): Promisevoid { const nodeInfo await this.client.send(DOM.describeNode, { objectId: this.handle.id, }); const fieldId nodeInfo.node.backendNodeId; const frameId this.frame._id; await this.client.send(Autofill.trigger, { fieldId, frameId, card: data.creditCard, address: data.address, }); }可以从中读出整条调用链通过DOM.describeNode把ElementHandle的远程对象objectId解析为backendNodeId作为Autofill.trigger要求的fieldId取当前frame的 id 作为frameId发送Autofill.trigger命令把data.creditCard和data.address原样透传给 CDP Autofill 域。也就是说AutofillAddressField里每一个字符串值最终都会原封不动地进入Autofill.trigger的address.fields[].name由浏览器 Autofill 引擎按字段类型把值填入匹配的表单控件——这正是Puppeteer 不做字段映射只做类型安全封装这一设计在协议层的体现。BiDi 连接下的实现在 bidi/ElementHandle.ts从源码结构看其流程同样是先DOM.describeNode取得backendNodeId再发送Autofill.trigger两条连接方式在协议层面走的是同一命令。实战示例仓库测试中的地址填充仓库自带的 autofill.test.ts 提供了两个经过 CI 验证的完整用例。其中的地址填充用例恰好就是AutofillAddressField枚举的标准用法可原样复制为自己的自动化脚本骨架import puppeteer from puppeteer; const browser await puppeteer.launch(); const page await browser.newPage(); // 假设页面是一个收货地址表单 // input idname input idstreet input idcity input idzip await page.goto(http://localhost:8000/address-form.html); using name await page.waitForSelector(#name); await name!.autofill({ address: { fields: [ {name: NAME_FULL, value: Jane Doe}, {name: ADDRESS_HOME_STREET_ADDRESS, value: 123 Main St}, {name: ADDRESS_HOME_CITY, value: Anytown}, {name: ADDRESS_HOME_ZIP, value: 12345}, ], }, }); // 验证四个 input 的 value 依次为 // Jane Doe, 123 Main St, Anytown, 12345 await browser.close();测试用例autofill.test.ts执行后会断言页面内所有input的值依次为Jane Doe,123 Main St,Anytown,12345,Submit——证明NAME_FULL、ADDRESS_HOME_STREET_ADDRESS、ADDRESS_HOME_CITY、ADDRESS_HOME_ZIP四个枚举值在真实表单上被浏览器正确路由到了对应控件。同文件中的信用卡用例autofill.test.ts则以#name元素为锚点触发填充断言结果为John Smith,4444444444444444,01,2030,Submit。使用上有一个实用技巧autofill()可以传给表单内任意一个合法的输入元素测试中都用#name作为入口浏览器 Autofill 引擎会自行把整份地址数据分发到同表单的其他字段上因此不需要对每个input各调用一次。总结与延伸阅读AutofillAddressField虽然只是一个 16 成员的const enum但它承载的是 Puppeteer 表单自动化中相当实用的一环把浏览器原生 Autofill 引擎纳入测试/自动化脚本的可控范围避免逐字段type()模拟输入带来的时序不稳定问题。要点回顾枚举值与 CDPAutofill.Address字段类型一一对应直接透传给Autofill.trigger见 cdp/ElementHandle.ts枚举值配合AutofillData[address].fields使用类型设计允许枚举之外的字符串扩展见 api/ElementHandle.ts官方文档注释声明的能力边界是 Chrome 的新 headless 与 headful 模式实际可用性以仓库测试 autofill.test.ts 的行为为准相关 API 文档AutofillData、ElementHandle.autofill、AutofillAddressField。【免费下载链接】puppeteerJavaScript API for Chrome and Firefox项目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

2026年8月GitHub开源项目实测榜单:10个值得你上手的仓库 2026/9/8 17:01:25

2026年8月GitHub开源项目实测榜单:10个值得你上手的仓库

作为常年泡在 GitHub 上的老用户,我每个月都会刷到好几篇“热门项目盘点”,但说实话,大部分就是把 star 数最高的仓库拉个名单,再复制一遍 README。读者看完除了混个眼熟,什么也没留下。所以这次做 2026 年 8 月的榜单…

阅读更多 →
训练1000轮损失不降?反向传播手算一遍就懂了 2026/9/8 17:01:25

训练1000轮损失不降?反向传播手算一遍就懂了

训练1000轮损失不降?反向传播手算一遍就懂了 【免费下载链接】nndl 邱锡鹏《神经网络与深度学习》第二版与通识版:电子书、章节目录、学习资源与勘误。 项目地址: https://gitcode.com/GitHub_Trending/nn/nndl 训练跑了 1000 轮,损失…

阅读更多 →
STM32H743VIT6TR旗舰MCU:架构解析、开发实战与选型指南 2026/9/8 17:01:25

STM32H743VIT6TR旗舰MCU:架构解析、开发实战与选型指南

1. 这颗芯片到底什么来头 1.1 为什么 STM32H7 系列能被称为旗舰 做嵌入式开发的朋友,这两年应该都有同一个感受:项目需求越来越卷。屏幕要上 RGB 高清,算法要跑神经网络推理,通信要带以太网加 USB 高速,还得留出余量给…

阅读更多 →
Starship 进阶安装指南:Chocolatey、Termux、Funtoo 与 Nix 平台的部署与 Shell 初始化实践 2026/9/8 17:01:25

Starship 进阶安装指南:Chocolatey、Termux、Funtoo 与 Nix 平台的部署与 Shell 初始化实践

Starship 进阶安装指南:Chocolatey、Termux、Funtoo 与 Nix 平台的部署与 Shell 初始化实践 【免费下载链接】starship ☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell! 项目地址: https://gitcode.com/GitHub_…

阅读更多 →
opencode:终端里的开源AI编程代理完全指南 2026/9/8 17:01:25

opencode:终端里的开源AI编程代理完全指南

如果你最近在逛技术社区或者刷短视频,应该没少看到opencode这个词。我第一次被它吸引,是在一个讨论“终端里的AI编程助手到底谁好用”的帖子下面,有人甩出一条命令,然后贴了一张终端里跑出全彩交互界面的截图。那时候我还在用各种…

阅读更多 →
随机森林建模及反演流程(遥感影像) 2026/9/8 16:58:25

随机森林建模及反演流程(遥感影像)

随机森林建模及反演流程(遥感影像) 代码下载 ​ 自助下载→ 方式一:顶部专栏 https://blog.csdn.net/weixin_45276304/article/details/164451286?spm1001.2014.3001.5502 方式二 数据下载列表 来源:GISer资料库 ​ 我把…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞