From 340496da303521f03ca46d98b866c1bf411430f2 Mon Sep 17 00:00:00 2001 From: nyne Date: Sat, 1 Feb 2025 16:24:43 +0800 Subject: [PATCH] Fix cloudflare bypass --- lib/network/cloudflare.dart | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/lib/network/cloudflare.dart b/lib/network/cloudflare.dart index fdbbf30..cf61de1 100644 --- a/lib/network/cloudflare.dart +++ b/lib/network/cloudflare.dart @@ -5,6 +5,7 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:venera/foundation/app.dart'; import 'package:venera/foundation/appdata.dart'; import 'package:venera/foundation/consts.dart'; +import 'package:venera/foundation/log.dart'; import 'package:venera/pages/webview.dart'; import 'package:venera/utils/ext.dart'; @@ -121,9 +122,18 @@ void passCloudflare(CloudflareException e, void Function() onFinished) async { var webview = DesktopWebview( initialUrl: url, onTitleChange: (title, controller) async { - var res = await controller.evaluateJavascript( - "document.head.innerHTML.includes('#challenge-success-text')"); - if (res == 'false') { + var head = + await controller.evaluateJavascript("document.head.innerHTML") ?? + ""; + Log.info("Cloudflare", "Checking head: $head"); + var isChallenging = head.contains('#challenge-success-text') || + head.contains("#challenge-error-text") || + head.contains("#challenge-form"); + if (!isChallenging) { + Log.info( + "Cloudflare", + "Cloudflare is passed due to there is no challenge css", + ); var ua = controller.userAgent; if (ua != null) { appdata.implicitData['ua'] = ua; @@ -143,10 +153,17 @@ void passCloudflare(CloudflareException e, void Function() onFinished) async { webview.open(); } else { void check(InAppWebViewController controller) async { - var res = await controller.platform.evaluateJavascript( - source: - "document.head.innerHTML.includes('#challenge-success-text')"); - if (res == false) { + var head = await controller.evaluateJavascript( + source: "document.head.innerHTML") as String; + Log.info("Cloudflare", "Checking head: $head"); + var isChallenging = head.contains('#challenge-success-text') || + head.contains("#challenge-error-text") || + head.contains("#challenge-form"); + if (!isChallenging) { + Log.info( + "Cloudflare", + "Cloudflare is passed due to there is no challenge css", + ); var ua = await controller.getUA(); if (ua != null) { appdata.implicitData['ua'] = ua;