@kne/fastify-puppeteer 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -187,7 +187,7 @@ fastify-puppeteer 是一个基于 Fastify 的插件,它集成了 Puppeteer 来
187
187
  | 参数名 | 类型 | 必填 | 描述 |
188
188
  |-------|------|------|------|
189
189
  | url | string | 是 | 需要转换的网页 URL |
190
- | options | object | 否 | PDF 生成选项,参考 Puppeteer API |
190
+ | options | object | 否 | PDF 生成选项,参考 Puppeteer API 和 URL 转换特有选项 |
191
191
 
192
192
  **响应结果:**
193
193
  - 返回生成的 PDF 文件流
@@ -207,7 +207,7 @@ fastify-puppeteer 是一个基于 Fastify 的插件,它集成了 Puppeteer 来
207
207
  | 参数名 | 类型 | 必填 | 描述 |
208
208
  |-------|------|------|------|
209
209
  | urlList | array | 是 | 需要转换的网页 URL 列表 |
210
- | options | object | 否 | PDF 生成选项,参考 Puppeteer API |
210
+ | options | object | 否 | PDF 生成选项,参考 Puppeteer API 和 URL 转换特有选项 |
211
211
 
212
212
  **响应结果:**
213
213
  - 返回包含所有生成 PDF 的 ZIP 文件流
@@ -227,8 +227,8 @@ fastify-puppeteer 是一个基于 Fastify 的插件,它集成了 Puppeteer 来
227
227
  | 参数名 | 类型 | 必填 | 描述 |
228
228
  |-------|------|------|------|
229
229
  | url | string | 是 | 需要转换的网页 URL |
230
- | selector | string | 否 | 页面元素选择器,指定截图区域 |
231
- | options | object | 否 | 图片生成选项,参考 Puppeteer API |
230
+ | selector | string | 否 | 页面元素选择器,指定截图区域。如果提供,将只截取该元素区域 |
231
+ | options | object | 否 | 图片生成选项,参考 Puppeteer API 和 URL 转换特有选项 |
232
232
 
233
233
  **响应结果:**
234
234
  - 返回生成的图片文件流
@@ -248,8 +248,8 @@ fastify-puppeteer 是一个基于 Fastify 的插件,它集成了 Puppeteer 来
248
248
  | 参数名 | 类型 | 必填 | 描述 |
249
249
  |-------|------|------|------|
250
250
  | urlList | array | 是 | 需要转换的网页 URL 列表 |
251
- | selector | string | 否 | 页面元素选择器,指定截图区域 |
252
- | options | object | 否 | 图片生成选项,参考 Puppeteer API |
251
+ | selector | string | 否 | 页面元素选择器,指定截图区域。如果提供,将只截取该元素区域 |
252
+ | options | object | 否 | 图片生成选项,参考 Puppeteer API 和 URL 转换特有选项 |
253
253
 
254
254
  **响应结果:**
255
255
  - 返回包含所有生成图片的 ZIP 文件流
@@ -281,3 +281,13 @@ PDF 生成选项参考 Puppeteer 的 [page.pdf()](https://pptr.dev/api/puppeteer
281
281
  | clip | object | 裁剪区域,包含 x, y, width, height 属性 |
282
282
  | omitBackground | boolean | 是否隐藏默认白色背景 |
283
283
 
284
+ #### URL 转换特有选项
285
+
286
+ 以下选项适用于 parseUrlToPdf、parseUrlToPdfBatch、parseUrlToPhoto 和 parseUrlToPhotoBatch 接口:
287
+
288
+ | 选项名 | 类型 | 描述 |
289
+ |-------|------|------|
290
+ | waitForSelectors | array | 等待页面中特定元素出现的选择器数组,在继续处理前会等待这些元素加载完成 |
291
+ | waitForVisible | boolean | 是否等待元素可见,默认为 false,仅检查元素是否存在于 DOM 中 |
292
+ | waitForMaxTime | number | 等待元素出现的最大时间(毫秒),默认为 10000(10秒) |
293
+
@@ -210,7 +210,7 @@ module.exports = fp(async (fastify, options) => {
210
210
  },
211
211
  async (request, reply) => {
212
212
  const filename = await services.parseUrlToPhotoBatch({
213
- urlList: request.body.url,
213
+ urlList: request.body.urlList,
214
214
  selector: request.body.selector,
215
215
  options: request.body.options
216
216
  });
package/libs/services.js CHANGED
@@ -73,11 +73,19 @@ module.exports = fp(async (fastify, options) => {
73
73
  });
74
74
  });
75
75
 
76
- const parseUrlToPdf = memoCache('parseUrlToPdf', async ({ url, options }) => {
76
+ const parseUrlToPdf = memoCache('parseUrlToPdf', async ({ url, options = {} }) => {
77
77
  return await puppeteerPage.task(async ({ page }) => {
78
78
  await page.goto(url, {
79
79
  waitUntil: 'networkidle2'
80
80
  });
81
+ await Promise.all(
82
+ (options.waitForSelectors || []).map(waitForSelector => {
83
+ return page.waitForSelector(waitForSelector, {
84
+ visible: options.waitForVisible || false,
85
+ timeout: options.waitForMaxTime || 10000
86
+ });
87
+ })
88
+ );
81
89
  return await page.pdf(
82
90
  Object.assign(
83
91
  {},
@@ -98,11 +106,19 @@ module.exports = fp(async (fastify, options) => {
98
106
  });
99
107
  });
100
108
 
101
- const parseUrlToPhoto = memoCache('parseUrlToPhoto', async ({ url, selector, options }) => {
109
+ const parseUrlToPhoto = memoCache('parseUrlToPhoto', async ({ url, selector, options = {} }) => {
102
110
  return await puppeteerPage.task(async ({ page }) => {
103
111
  await page.goto(url, {
104
112
  waitUntil: 'networkidle2'
105
113
  });
114
+ await Promise.all(
115
+ (options.waitForSelectors || []).map(waitForSelector => {
116
+ return page.waitForSelector(waitForSelector, {
117
+ visible: options.waitForVisible || false,
118
+ timeout: options.waitForMaxTime || 10000
119
+ });
120
+ })
121
+ );
106
122
  if (selector) {
107
123
  await page.locator(selector).wait();
108
124
  const element = await page.$(selector);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kne/fastify-puppeteer",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "用于操作无头浏览器截图保存pdf等",
5
5
  "main": "index.js",
6
6
  "scripts": {