Compare commits

..

2 Commits

Author SHA1 Message Date
ilike2burnthing
35c2f09202 Bump version 2.2.10 (#560) 2022-10-22 14:39:18 +01:00
Athorcis
197258e921 detect DDos-Guard through title content. resolves #546 (#559) 2022-10-22 14:34:29 +01:00
4 changed files with 26 additions and 5 deletions

View File

@@ -1,5 +1,9 @@
# Changelog
## v2.2.10 (2022/10/22)
* Detect DDoS-Guard through title content
## v2.2.9 (2022/09/25)
* Detect Cloudflare Access Denied

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "flaresolverr",
"version": "2.2.9",
"version": "2.2.10",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "flaresolverr",
"version": "2.2.9",
"version": "2.2.10",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "flaresolverr",
"version": "2.2.9",
"version": "2.2.10",
"description": "Proxy server to bypass Cloudflare protection.",
"scripts": {
"install": "node install.js",

View File

@@ -15,6 +15,9 @@ const CHALLENGE_SELECTORS: string[] = [
'#link-ddg', // DDoS-GUARD
'td.info #js_info' // Custom CloudFlare for EbookParadijs, Film-Paleis, MuziekFabriek and Puur-Hollands
];
const CHALLENGE_TITLES: string[] = [
'DDOS-GUARD'
];
const CAPTCHA_SELECTORS: string[] = [
// todo: deprecate 'input[name="cf_captcha_kind"]'
'#cf-challenge-hcaptcha-wrapper', '#cf-norobot-container', 'input[name="cf_captcha_kind"]'
@@ -49,7 +52,7 @@ export default async function resolveChallenge(url: string, page: Page, response
// find Cloudflare selectors
let selectorFound = false;
let selector: string = await findAnySelector(page, CHALLENGE_SELECTORS)
let selector: string = await findChallenge(page)
if (selector) {
selectorFound = true;
log.debug(`Javascript challenge element '${selector}' detected.`)
@@ -58,7 +61,7 @@ export default async function resolveChallenge(url: string, page: Page, response
while (true) {
try {
selector = await findAnySelector(page, CHALLENGE_SELECTORS)
selector = await findChallenge(page)
if (!selector) {
// solved!
log.debug('Challenge element not found')
@@ -124,6 +127,20 @@ export default async function resolveChallenge(url: string, page: Page, response
return response;
}
async function findChallenge(page: Page): Promise<string|null> {
const selector = await findAnySelector(page, CHALLENGE_SELECTORS);
if (selector == null) {
const title = await page.title();
if (CHALLENGE_TITLES.includes(title)) {
return `:title[${title}]`;
}
}
return selector;
}
async function findAnySelector(page: Page, selectors: string[]) {
for (const selector of selectors) {
const cfChallengeElem = await page.$(selector)