@browserless/goto 9.5.0 → 9.6.2
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/package.json +4 -3
- package/src/engine.bin +0 -0
- package/src/evasions/index.js +4 -2
- package/src/evasions/navigator-vendor.js +25 -0
- package/src/evasions/window-frame.js +9 -0
- package/src/index.js +17 -4
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@browserless/goto",
|
|
3
3
|
"description": "Go to a page aborting unnecessary requests",
|
|
4
4
|
"homepage": "https://browserless.js.org/#/?id=gotopage-options",
|
|
5
|
-
"version": "9.
|
|
5
|
+
"version": "9.6.2",
|
|
6
6
|
"main": "src/index.js",
|
|
7
7
|
"author": {
|
|
8
8
|
"email": "hello@microlink.io",
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
"@browserless/test": "latest",
|
|
48
48
|
"ava": "3",
|
|
49
49
|
"browserless": "latest",
|
|
50
|
-
"
|
|
50
|
+
"fpscanner": "latest",
|
|
51
|
+
"p-wait-for": "3"
|
|
51
52
|
},
|
|
52
53
|
"engines": {
|
|
53
54
|
"node": ">= 12"
|
|
@@ -68,5 +69,5 @@
|
|
|
68
69
|
"timeout": "2m",
|
|
69
70
|
"verbose": true
|
|
70
71
|
},
|
|
71
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "e29ac9d5b86e7db27429130abc9689bbf39025dd"
|
|
72
73
|
}
|
package/src/engine.bin
CHANGED
|
Binary file
|
package/src/evasions/index.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
4
|
chromeRuntime: require('./chrome-runtime'),
|
|
5
|
-
stackTraces: require('./stack-traces'),
|
|
6
5
|
mediaCodecs: require('./media-codecs'),
|
|
7
6
|
navigatorPermissions: require('./navigator-permissions'),
|
|
8
7
|
navigatorPlugins: require('./navigator-plugins'),
|
|
8
|
+
navigatorVendor: require('./navigator-vendor'),
|
|
9
9
|
randomizeUserAgent: require('./randomize-user-agent'),
|
|
10
|
-
|
|
10
|
+
stackTraces: require('./stack-traces'),
|
|
11
|
+
webglVendor: require('./webgl-vendor'),
|
|
12
|
+
windowFrame: require('./window-frame')
|
|
11
13
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module.exports = page =>
|
|
2
|
+
page.evaluateOnNewDocument(async () => {
|
|
3
|
+
const getUserAgentVendor = userAgent => {
|
|
4
|
+
let vendor
|
|
5
|
+
|
|
6
|
+
if (userAgent.includes('Firefox')) {
|
|
7
|
+
vendor = 'firefox'
|
|
8
|
+
} else if (userAgent.includes('Chrome')) {
|
|
9
|
+
vendor = 'chrome'
|
|
10
|
+
} else {
|
|
11
|
+
vendor = 'safari'
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return vendor
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const userAgent = navigator.userAgent
|
|
18
|
+
const userAgentVendor = getUserAgentVendor(userAgent)
|
|
19
|
+
|
|
20
|
+
if (userAgentVendor === 'chrome') return
|
|
21
|
+
|
|
22
|
+
Object.defineProperty(navigator, 'vendor', {
|
|
23
|
+
value: userAgentVendor === 'safari' ? 'Apple Computer, Inc.' : ''
|
|
24
|
+
})
|
|
25
|
+
})
|
package/src/index.js
CHANGED
|
@@ -14,6 +14,8 @@ const isUrl = require('is-url-http')
|
|
|
14
14
|
const path = require('path')
|
|
15
15
|
const fs = require('fs')
|
|
16
16
|
|
|
17
|
+
const truncate = (str, n = 80) => (str.length > n ? str.substr(0, n - 1) + '…' : str)
|
|
18
|
+
|
|
17
19
|
const EVASIONS = require('./evasions')
|
|
18
20
|
|
|
19
21
|
const ALL_EVASIONS_KEYS = Object.keys(EVASIONS)
|
|
@@ -119,7 +121,7 @@ const inject = async (page, { timeout, mediaType, animations, modules, scripts,
|
|
|
119
121
|
postPromises.push(
|
|
120
122
|
run({
|
|
121
123
|
fn: Promise.all(
|
|
122
|
-
castArray(modules).map(value => injectScript(page, value, { type: '
|
|
124
|
+
castArray(modules).map(value => injectScript(page, value, { type: 'module' }))
|
|
123
125
|
),
|
|
124
126
|
timeout,
|
|
125
127
|
debug: 'modules'
|
|
@@ -220,17 +222,28 @@ module.exports = ({
|
|
|
220
222
|
|
|
221
223
|
const prePromises = []
|
|
222
224
|
|
|
225
|
+
if (modules || scripts || styles) {
|
|
226
|
+
prePromises.push(
|
|
227
|
+
run({
|
|
228
|
+
fn: page.setBypassCSP(true),
|
|
229
|
+
timeout: actionTimeout,
|
|
230
|
+
debug: 'bypassCSP'
|
|
231
|
+
})
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
|
|
223
235
|
if (abortTypes.length > 0) {
|
|
224
236
|
await page.setRequestInterception(true)
|
|
225
237
|
page.on('request', req => {
|
|
226
238
|
if (req.isInterceptResolutionHandled()) return
|
|
227
|
-
|
|
228
239
|
const resourceType = req.resourceType()
|
|
240
|
+
const url = truncate(req.url())
|
|
241
|
+
|
|
229
242
|
if (!abortTypes.includes(resourceType)) {
|
|
230
|
-
debug('continue', { url
|
|
243
|
+
debug('continue', { url, resourceType })
|
|
231
244
|
return req.continue(req.continueRequestOverrides(), 0)
|
|
232
245
|
}
|
|
233
|
-
debug('abort', { url
|
|
246
|
+
debug('abort', { url, resourceType })
|
|
234
247
|
return req.abort('blockedbyclient', 0)
|
|
235
248
|
})
|
|
236
249
|
}
|