html-get 2.22.3 → 2.24.0

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +24 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "html-get",
3
3
  "description": "Get the HTML from any website, fine-tuned for correction & speed",
4
4
  "homepage": "https://nicedoc.com/microlinkhq/html-get",
5
- "version": "2.22.3",
5
+ "version": "2.24.0",
6
6
  "types": "index.d.ts",
7
7
  "main": "src/index.js",
8
8
  "bin": {
package/src/index.js CHANGED
@@ -155,6 +155,7 @@ const prerender = PCancelable.fn(
155
155
  }
156
156
  },
157
157
  {
158
+ flattenShadowDOM: true,
158
159
  timeout,
159
160
  headers,
160
161
  abortTypes
@@ -191,6 +192,11 @@ const prerender = PCancelable.fn(
191
192
 
192
193
  const modes = { fetch, prerender }
193
194
 
195
+ const hasShadowDOM = $ =>
196
+ $('*')
197
+ .toArray()
198
+ .some(el => el.tagName?.includes('-'))
199
+
194
200
  const isFetchMode = url => {
195
201
  const parsedUrl = parseUrl(url)
196
202
  return autoDomains.some(conditions =>
@@ -308,7 +314,24 @@ module.exports = PCancelable.fn(
308
314
 
309
315
  onCancel(() => promise.cancel())
310
316
 
311
- const { mode, html, $, ...payload } = await promise
317
+ let { mode, html, $, ...payload } = await promise
318
+
319
+ if (mode === 'fetch' && getBrowserless && hasShadowDOM($)) {
320
+ debug('shadow DOM detected, retrying with prerender', { url: targetUrl })
321
+ const prerenderPromise = getContent(targetUrl, 'prerender', {
322
+ getBrowserless,
323
+ getTemporalFile,
324
+ gotOpts,
325
+ headers,
326
+ mutool,
327
+ puppeteerOpts,
328
+ rewriteUrls,
329
+ rewriteHtml,
330
+ toEncode
331
+ })
332
+ onCancel(() => prerenderPromise.cancel())
333
+ ;({ mode, html, $, ...payload } = await prerenderPromise)
334
+ }
312
335
 
313
336
  return Object.assign(payload, {
314
337
  ...serializeHtml($),