我是一个使用 Puppeteer 的爬行初学者。我成功抓取了以下网站。下面是从商城中提取特定产品名称的代码。
const express = require('express');
const puppeteer = require('puppeteer');
const app = express();
(async () => {
const width = 1600, height = 1040;
const option = { headless: true, slowMo: true, args: [`--window-size=${width},${height}`] };
const browser = await puppeteer.launch(option);
const page = await browser.newPage();
const vp = {width: width, height: height};
await page.setViewport(vp);
const navigationPromise = page.waitForNavigation();
// 네이버 스토어팜
await page.goto('https://shopping.naver.com/home/p/index.nhn');
await navigationPromise;
await page.waitFor(2000);
const textBoxId = 'co_srh_input';
await page.type('.' + textBoxId, '양말', {delay: 100});
await page.keyboard.press('Enter');
await page.waitFor(5000);
await page.waitForSelector('ul.goods_list');
await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'});
const result = await page.evaluate(() => {
const data = [];
$('ul.goods_list > li._itemSection').each(function () {
const title = $.trim($(this).find('div.info > a.tit').text());
const price = $(this).find('div.info > .price .num').text();
const image = $(this).find('div.img_area img').attr('src');
data.push({ title, price, image })
});
return data;
});
console.log(result);
await browser.close();
})();
app.listen(3000, () => console.log("Express!!!"));
我有一个问题。如果我想从页数中获取信息,我该怎么办? 例如(1 页、2 页、3 页 ....)
最佳答案
将属性 footerTemplate 与 displayHeaderFooter 一起用于最初使用 puppeteer API 的展示页面
await page.pdf({
path: 'hacks.pdf',
format: 'A4',
displayHeaderFooter: true,
footerTemplate: '<div><div class='pageNumber'></div> <div>/</div><div class='totalPages'></div></div>'
});
https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#pagepdfoptions
//footerTemplate 打印页脚的 HTML 模板。
//应该是有效的 HTML 标记,具有以下 CSS 类,用于将打印值注入(inject)其中:
//- 日期格式化的打印日期
//- 标题文档标题
//- url文档位置
//- pageNumber 当前页码
//- totalPages 文档中的总页数
关于javascript - 如何使用 Puppeteer 获取页数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53294512/