forked from ruimarinho/gsts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpuppeteer-iframe-plugin.js
75 lines (62 loc) · 1.99 KB
/
puppeteer-iframe-plugin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
'use strict'
const { PuppeteerExtraPlugin } = require('puppeteer-extra-plugin')
/**
* Iframe puppeteer plugin.
*/
class Plugin extends PuppeteerExtraPlugin {
constructor(opts = {}) {
super(opts)
}
get name() {
return 'stealth/evasions/iframe'
}
async onPageCreated(page) {
await page.evaluateOnNewDocument(() => {
const oldCreate = document.createElement.bind(document);
const newCreate = (...args) => {
if (args[0] === 'iframe') {
const iframe = oldCreate(...args);
if (!iframe.contentWindow) {
Object.defineProperty(iframe, 'contentWindow', {
configurable: true,
value: { chrome: {} },
});
}
if (!iframe.contentWindow.chrome) {
Object.defineProperty(iframe.contentWindow, 'chrome', {
value: {},
configurable: true,
});
}
return iframe;
}
return oldCreate(...args);
};
newCreate.toString = () => 'function createElement() { [native code] }';
document.createElement = newCreate;
const oldCall = Function.prototype.call;
function call() {
return oldCall.apply(this, arguments);
}
Function.prototype.call = call;
const nativeToStringFunctionString = Error.toString().replace(
/Error/g,
'toString',
);
const oldToString = Function.prototype.toString;
function functionToString() {
if (this === window.document.createElement) {
return 'function createElement() { [native code] }';
}
if (this === functionToString) {
return nativeToStringFunctionString;
}
return oldCall.call(oldToString, this);
}
Function.prototype.toString = functionToString
})
}
}
module.exports = function(pluginConfig) {
return new Plugin(pluginConfig)
}