mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-18 22:33:26 +08:00
* style: add eslint-unicorn * style: fix unicorn/no-useless-spread * style: fix unicorn/no-useless-promise-resolve-reject * style: fix unicorn/no-for-loop * fix: codeql bad HTML filtering regexp * fix: codeql incomplete replace * fix: unicorn/no-abusive-eslint-disable * style: fix unicorn/no-new-array * style: fix unicorn/no-typeof-undefined * style: fix unicorn/no-zero-fractions * style: fix unicorn/no-empty-file * style: fix unicorn/prefer-date-now * revert: auto fix unicorn/prefer-switch on lib/v2/kuaidi100/utils.js * style: fix unicorn/prefer-array-find * style: fix unicorn/prefer-array-flat * style: fix unicorn/prefer-array-flat-map * style: fix unicorn/prefer-at * style: fix unicorn/prefer-string-starts-ends-with * style: fix unicorn/prefer-includes * fix: codeql URL substring sanitization * style: fix unicorn/prefer-optional-catch-binding * style: fix unicorn/catch-error-name * style: fix unicorn/escape-case * style: fix unicorn/prefer-native-coercion-functions * style: fix unicorn/prefer-regexp-test * style: fix unicorn/require-array-join-separator * style: fix unicorn/prefer-math-trunc * style: fix unicorn/prefer-negative-index * style: fix unicorn/prefer-dom-node-dataset * style: fix unicorn/prefer-dom-node-text-content * style: fix unicorn/prefer-query-selector * style: fix unicorn/no-array-for-each * style: fix unicorn/no-negated-condition * style: fix unicorn/prefer-add-event-listener * style: fix unicorn/import-style * style: fix prefer-regex-literals * style: disable unicorn/no-useless-switch-case * style: disable unicorn/text-encoding-identifier-case * style: fix unicorn/prefer-set-has * style: fix unicorn/prefer-spread * revert: auto fix on lib/routes/universities/ynnu/edu/base64.js * style: fix unicorn/no-useless-undefined * style: fix unicorn/no-array-push-push * style: fix unicorn/no-useless-undefined again * style: fix unicorn/no-lonely-if * style: fix unicorn/prefer-reflect-apply * style: fix unicorn/switch-case-braces * style: fix unicorn/prefer-switch * style: fix unicorn/prefer-array-some * fix: deepscan UNUSED_VAR_ASSIGN * style: fix unicorn/prefer-ternary * fix: follow-up of unicorn/prefer-ternary * revert: auto fix of unicorn/prefer-string-slice for substring() * style: disable unicorn/prefer-string-slice fix: auto fix slice over deprecated substr * style: fix unicorn/throw-new-error * style: fix unicorn/filename-case * test: fix dateParser renaming * style: fix unicorn/better-regex * style: fix unicorn/prefer-string-replace-all * fix(deps): add sanitize-html * style: fix no-prototype-builtins * style: fix unicorn/consistent-destructuring * style: fix unicorn/consistent-function-scoping * style: fix unicorn/prefer-regexp-test * style: fix unicorn/prefer-logical-operator-over-ternary * style: fix unicorn/no-array-callback-reference * style: add prefer-object-has-own * style: warn unicorn/no-empty-file * style: fix unicorn/prefer-number-properties * style: fix no-useless-undefined again * style: fix unicorn/numeric-separators-style * style: disable unicorn/no-array-callback-reference false postive with cheerio
78 lines
3.5 KiB
JavaScript
78 lines
3.5 KiB
JavaScript
const config = require('@/config').value;
|
|
const { proxyUri, proxyUrlHandler } = require('./unify-proxy');
|
|
let puppeteer = require('puppeteer');
|
|
const proxyChain = require('proxy-chain');
|
|
const logger = require('./logger');
|
|
|
|
const options = {
|
|
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-infobars', '--window-position=0,0', '--ignore-certificate-errors', '--ignore-certificate-errors-spki-list', `--user-agent=${config.ua}`],
|
|
headless: 'new',
|
|
ignoreHTTPSErrors: true,
|
|
};
|
|
|
|
/**
|
|
* @param {Object} extraOptions
|
|
* @param {boolean} extraOptions.stealth - Use puppeteer-extra-plugin-stealth
|
|
* @returns Puppeteer browser
|
|
*/
|
|
module.exports = async (extraOptions = {}) => {
|
|
if (extraOptions.stealth) {
|
|
const { addExtra } = require('puppeteer-extra');
|
|
puppeteer = addExtra(puppeteer);
|
|
|
|
// workaround for vercel/nft #54, #283, #304
|
|
require('puppeteer-extra-plugin-stealth/evasions/chrome.app');
|
|
require('puppeteer-extra-plugin-stealth/evasions/chrome.csi');
|
|
require('puppeteer-extra-plugin-stealth/evasions/chrome.loadTimes');
|
|
require('puppeteer-extra-plugin-stealth/evasions/chrome.runtime');
|
|
require('puppeteer-extra-plugin-stealth/evasions/defaultArgs');
|
|
require('puppeteer-extra-plugin-stealth/evasions/iframe.contentWindow');
|
|
require('puppeteer-extra-plugin-stealth/evasions/media.codecs');
|
|
require('puppeteer-extra-plugin-stealth/evasions/navigator.hardwareConcurrency');
|
|
require('puppeteer-extra-plugin-stealth/evasions/navigator.languages');
|
|
require('puppeteer-extra-plugin-stealth/evasions/navigator.permissions');
|
|
require('puppeteer-extra-plugin-stealth/evasions/navigator.plugins');
|
|
require('puppeteer-extra-plugin-stealth/evasions/navigator.vendor');
|
|
require('puppeteer-extra-plugin-stealth/evasions/navigator.webdriver');
|
|
require('puppeteer-extra-plugin-stealth/evasions/sourceurl');
|
|
require('puppeteer-extra-plugin-stealth/evasions/user-agent-override');
|
|
require('puppeteer-extra-plugin-stealth/evasions/webgl.vendor');
|
|
require('puppeteer-extra-plugin-stealth/evasions/window.outerdimensions');
|
|
require('puppeteer-extra-plugin-user-preferences');
|
|
require('puppeteer-extra-plugin-user-data-dir');
|
|
|
|
puppeteer.use(require('puppeteer-extra-plugin-stealth')());
|
|
}
|
|
|
|
if (proxyUri) {
|
|
if (proxyUrlHandler.username || proxyUrlHandler.password) {
|
|
// only proxies with authentication need to be anonymized
|
|
if (proxyUrlHandler.protocol === 'http:') {
|
|
options.args.push(`--proxy-server=${await proxyChain.anonymizeProxy(proxyUri)}`);
|
|
} else {
|
|
logger.warn('SOCKS/HTTPS proxy with authentication is not supported by puppeteer, continue without proxy');
|
|
}
|
|
} else {
|
|
// Chromium cannot recognize socks5h and socks4a, so we need to trim their postfixes
|
|
options.args.push(`--proxy-server=${proxyUri.replace('socks5h://', 'socks5://').replace('socks4a://', 'socks4://')}`);
|
|
}
|
|
}
|
|
const browser = await (config.puppeteerWSEndpoint
|
|
? puppeteer.connect({
|
|
browserWSEndpoint: config.puppeteerWSEndpoint,
|
|
})
|
|
: puppeteer.launch(
|
|
config.chromiumExecutablePath
|
|
? {
|
|
executablePath: config.chromiumExecutablePath,
|
|
...options,
|
|
}
|
|
: options
|
|
));
|
|
setTimeout(() => {
|
|
browser.close();
|
|
}, 30000);
|
|
|
|
return browser;
|
|
};
|