javascript - 如何单击 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 出现,并且添加到购物车按钮也没有出现,正如我需要放的那样,我需要加载这个文件,但我想让脚本继续工作,因为目前它给出了一个错误,因为它尝试选择鞋码并在它可见之前单击按钮,有谁知道我可以如何解决这个问题而不从切换domcontentloaded
到load
? 如果我更改脚本,它会变慢
• 我还想知道我是否可以缓存 html,这样我就不必每次启动脚本或打开新标签时都加载它,我认为这样脚本也有助于我的脚本工作更快,有谁知道这是否可能?如果可能,这样做是否可行?(这个问题具体,我不需要代码,我只需要知道这个想法是否有效,是否值得我申请)
解决方案
推荐阅读
- java - Geomesa-utils:如何选择 ResolutionRange
- linux - sed 和 _ 字符的问题
- r - 自定义函数中的 tidyr::uncount() 错误
- spring-boot - @ModelAttribute 对象字段未绑定,并且在控制器中为 null
- electron - Electron 6 - 上下文菜单现在默认使用操作系统的主题(深色或浅色)。如何覆盖这种行为?
- aem - 如何在渲染条件下隐藏项目?
- google-compute-engine - pm2 on Google Compute Engine,多用户开发环境
- java - 如何在java正则表达式中提取整个匹配组
- javascript - 如何在不渲染整个组件以进行实时提要的情况下无限发送请求
- ios - 当呼叫是视频时,在 CallKit 来电屏幕中显示视频按钮