首页 > 解决方案 > 如何单击 pupeteer 按钮,并将 html 文件存储在 pupeteer 缓存中

问题描述

我有这个脚本:

const puppeteer = require('puppeteer');         
const fs = require('fs').promises;                                                                                                              
(async () => {                                    
 try{                                              
  console.log("Iniciado!")                        
  const browser = await puppeteer.launch({         
   executablePath:'/usr/bin/chromium',        
   headless:false,                                
  });                                             
  const page = await browser.newPage();         
  await page.setRequestInterception(true);        
  const blockedResourceTypes = ["image", "bacon", "imageset", "stylesheet", "font", "texttrack", "csp_report", "media", "object", "sub_frame", "main_frame"]                                      
  const allowURLs = [                               
   /*Index.css*/"https//images.lojanike.com.br/site/ni/dist/css/Index.css?v=5b95e1dc7eff61bf78f523058eb924e6",                                   
  ]                                               
  const allowedRequest = req => !blockedResourceTypes.includes(req.resourceType()) || allowURLs.includes(req.url())
  page.on('request', (req) => {
   if (allowedRequest(req)) {                       
    req.continue();                                
   }
   else {
    req.abort();
   }
  });
  const cookiesString = await fs.readFile('./cookies.json');
  const cookies = JSON.parse(cookiesString);
  await page.setCookie(...cookies);
  await page.goto('https://www.nike.com.br/air-max-1-x-clot-infantil-24-33-67-80-445-308385', { waitUntil: 'domcontentloaded', timeout:0});
  const tamanho = await page.$x('//label[@for="tamanho__id32"]', {visible:true})
  await tamanho[0].click('//label[@for="tamanho__id32"]');
  page.click('button#btn-comprar')
  console.log("Adicionado ao carrinho!")
 }
 catch(err){                                      
  console.log("Erro, elemento não está contido na pagina ou erro inesperado!", err)}
 })();

好吧,原来他不能点击标签和按钮,因为他试图在页面上显示之前点击,但我不明白,因为我传递了visible:true参数,我想解决这个问题,当我这样做 load而不是domcontentloaded工作时很好,但这会延迟加载,我想尽快单击,并注意我正在加载 index.css 文件,因为不加载此文件,选择鞋码的选项不会t 出现,并且添加到购物车按钮也没有出现,正如我需要放的那样,我需要加载这个文件,但我想让脚本继续工作,因为目前它给出了一个错误,因为它尝试选择鞋码并在它可见之前单击按钮,有谁知道我可以如何解决这个问题而不从切换domcontentloadedload? 如果我更改脚本,它会变慢

• 我还想知道我是否可以缓存 html,这样我就不必每次启动脚本或打开新标签时都加载它,我认为这样脚本也有助于我的脚本工作更快,有谁知道这是否可能?如果可能,这样做是否可行?(这个问题具体,我不需要代码,我只需要知道这个想法是否有效,是否值得我申请)

标签: javascriptnode.jsgoogle-chromepuppeteerbrowser-cache

解决方案


推荐阅读