Node.js 如何用木偶演员在iframe中填写表格

Node.js 如何用木偶演员在iframe中填写表格,node.js,puppeteer,Node.js,Puppeteer,嗯,我已经在堆栈溢出中研究并发现了一个类似的问题,但我不理解它,因此我做错了,它不起作用,我有以下脚本: const puppeteer = require('puppeteer'); const fs = require('fs').promises; (async ()

嗯,我已经在堆栈溢出中研究并发现了一个类似的问题,但我不理解它,因此我做错了,它不起作用,我有以下脚本:

const puppeteer = require('puppeteer');  
const fs = require('fs').promises;                                                                                                              
(async () => {
 console.log("Iniciado!")                        
 const browser = await 
 puppeteer.launch({        
  executablePath: '/usr/bin/chromium',            
  headlesss:false,                                
 });                                             
 const page = await 
 browser.newPage();           
 await page.setViewport({ width: 1920, height: 1080 });                                          await  
 page.setRequestInterceptiontrue);
 page.on('request', (req) => {                   
  if(req.resourceType() === 'image' || req.resourceType() === 'stylesheet' || req.resourceType() === 'font'){
   req.abort();                                   
  }                                               
  else {                                           
   req.continue();                               
  }                                              
 });
 await page.goto('https://www.nike.com.br/chuteira-nike-premier-2-sala-unissex-153-169-171-309321', { waitUntil: 'load',timeout:0});             
 await page.waitForXPath('//label[@for="tamanho__idM40F395"]',{visibility:true, timeout:0});    
 const tamanho = await page.$x('//label[@for="tamanho__idM40F395"]')                             
 await tamanho[0].click('//label[@for="tamanho__idM40F395"]');
 await page.waitForSelector('button#anchor-acessar-unite-oauth2')
 await page.click('button#anchor-acessar-unite-oauth2')
 })();
运行此脚本,它将选择运动鞋尺寸并单击登录按钮,但是如果它在iframe中,我如何填写表单?我需要能够填写表格

注:


我删除了图像和css加载,以便更快地加载页面。

您尝试过木偶类型api吗?从我所看到的,您的电子邮件和pw字段是带有ID的输入字段。尝试此等待页面。键入'88650c48-8f4f-48b7-9ce3-48087cacfd1c','my_email'与密码字段相同。

您只需找到iframe元素,获取其框架并使用它而不是页面:

const iframe=等待页面。waitForSelector'iframenike-unite-oauth2-iframe' const frame=等待iframe.contentFrame 等待帧。键入'input[name=emailAddress]','foo@bar.com' 等待帧。键入'input[name=password],'123' 等待帧。单击“输入[value=ENTRAR]”
这不应该是个问题。我试着点击输入,然后插入一些文本,但没有效果,测试你的示例没有效果,因为输入的id是动态的,输入的名称不再是动态的,如何使用name属性填写?我在堆栈溢出中发现了一个类似的问题,但我不明白-你能提供一个链接吗?也许我们可以帮助您理解它,这提供了有用的上下文。