diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1eac55d..62ec3c8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,8 +27,6 @@ jobs: - name: Create release uses: softprops/action-gh-release@v2 with: - tag_name: ${{ github.ref }} - name: ${{ github.ref }} body: ${{ env.changelog }} env: GITHUB_TOKEN: ${{ secrets.GH_PAT }} @@ -49,7 +47,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v6 with: - python-version: "3.13" + python-version: "3.14" - name: Build artifacts run: | diff --git a/Dockerfile b/Dockerfile index bb58bcc..67935d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.13-slim-bookworm as builder +FROM python:3.14-slim-bookworm as builder # Build dummy packages to skip installing them and their dependencies RUN apt-get update \ @@ -12,7 +12,7 @@ RUN apt-get update \ && equivs-build adwaita-icon-theme \ && mv adwaita-icon-theme_*.deb /adwaita-icon-theme.deb -FROM python:3.13-slim-bookworm +FROM python:3.14-slim-bookworm # Copy dummy packages COPY --from=builder /*.deb / diff --git a/README.md b/README.md index 562ba60..77db021 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ This is the recommended way for Windows users. > **Warning** > Installing from source code only works for x64 architecture. For other architectures see Docker images. -* Install [Python 3.13](https://www.python.org/downloads/). +* Install [Python 3.14](https://www.python.org/downloads/). * Install [Chrome](https://www.google.com/intl/en_us/chrome/) (all OS) or [Chromium](https://www.chromium.org/getting-involved/download-chromium/) (just Linux, it doesn't work in Windows) web browser. * (Only in Linux) Install [Xvfb](https://en.wikipedia.org/wiki/Xvfb) package. * (Only in macOS) Install [XQuartz](https://www.xquartz.org/) package. @@ -89,8 +89,8 @@ This is the recommended way for Windows users. * Run `pkg install chromium python313 py313-pip xorg-vfbserver` command to install the required dependencies. * Clone this repository and open a shell in that path. -* Run `python3.13 -m pip install -r requirements.txt` command to install FlareSolverr dependencies. -* Run `python3.13 src/flaresolverr.py` command to start FlareSolverr. +* Run `python3.14 -m pip install -r requirements.txt` command to install FlareSolverr dependencies. +* Run `python3.14 src/flaresolverr.py` command to start FlareSolverr. ### Systemd service @@ -328,3 +328,4 @@ to the file name of one of the adapters inside the `/captcha` directory. * C# implementation => https://github.com/FlareSolverr/FlareSolverrSharp + diff --git a/requirements.txt b/requirements.txt index 8230659..06a3c25 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ bottle==0.13.4 waitress==3.0.2 -selenium==4.36.0 +selenium==4.38.0 func-timeout==4.3.5 prometheus-client==0.23.1 # Required by undetected_chromedriver @@ -9,6 +9,6 @@ certifi==2025.10.5 websockets==15.0.1 packaging==25.0 # Only required for Linux and macOS -xvfbwrapper==0.2.14; platform_system != "Windows" +xvfbwrapper==0.2.15; platform_system != "Windows" # Only required for Windows pefile==2024.8.26; platform_system == "Windows" diff --git a/src/bottle_plugins/logger_plugin.py b/src/bottle_plugins/logger_plugin.py index 9005754..cf840e9 100644 --- a/src/bottle_plugins/logger_plugin.py +++ b/src/bottle_plugins/logger_plugin.py @@ -5,7 +5,7 @@ import logging def logger_plugin(callback): """ Bottle plugin to use logging module - http://bottlepy.org/docs/dev/plugindev.html + https://bottlepy.org/docs/dev/plugindev.html Wrap a Bottle request so that a log line is emitted after it's handled. (This decorator can be extended to take the desired logger as a param.) diff --git a/src/bottle_plugins/prometheus_plugin.py b/src/bottle_plugins/prometheus_plugin.py index 76f071e..36b767b 100644 --- a/src/bottle_plugins/prometheus_plugin.py +++ b/src/bottle_plugins/prometheus_plugin.py @@ -18,7 +18,7 @@ def setup(): def prometheus_plugin(callback): """ Bottle plugin to expose Prometheus metrics - http://bottlepy.org/docs/dev/plugindev.html + https://bottlepy.org/docs/dev/plugindev.html """ def wrapper(*args, **kwargs): actual_response = callback(*args, **kwargs) diff --git a/src/build_package.py b/src/build_package.py index 87e1e27..014d478 100644 --- a/src/build_package.py +++ b/src/build_package.py @@ -25,7 +25,7 @@ def clean_files(): def download_chromium(): # https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/ - revision = "1465706" if os.name == 'nt' else '1465706' + revision = "1522586" if os.name == 'nt' else '1522586' arch = 'Win_x64' if os.name == 'nt' else 'Linux_x64' dl_file = 'chrome-win' if os.name == 'nt' else 'chrome-linux' dl_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, 'dist_chrome') diff --git a/src/flaresolverr.py b/src/flaresolverr.py index 239098b..e65e134 100644 --- a/src/flaresolverr.py +++ b/src/flaresolverr.py @@ -81,7 +81,7 @@ if __name__ == "__main__": # fix ssl certificates for compiled binaries # https://github.com/pyinstaller/pyinstaller/issues/7229 - # https://stackoverflow.com/questions/55736855/how-to-change-the-cafile-argument-in-the-ssl-module-in-python3 + # https://stackoverflow.com/q/55736855 os.environ["REQUESTS_CA_BUNDLE"] = certifi.where() os.environ["SSL_CERT_FILE"] = certifi.where() diff --git a/src/tests.py b/src/tests.py index 9575db2..497acbe 100644 --- a/src/tests.py +++ b/src/tests.py @@ -21,11 +21,11 @@ class TestFlareSolverr(unittest.TestCase): proxy_socks_url = "socks5://127.0.0.1:1080" google_url = "https://www.google.com" post_url = "https://httpbin.org/post" - cloudflare_url = "https://nowsecure.nl" + cloudflare_url = "https://nowsecure.nl/" cloudflare_url_2 = "https://idope.se/torrent-list/harry/" - ddos_guard_url = "https://anidex.info/" + ddos_guard_url = "https://www.litres.ru/" fairlane_url = "https://www.pararius.com/apartments/amsterdam" - custom_cloudflare_url = "https://www.muziekfabriek.org" + custom_cloudflare_url = "https://www.muziekfabriek.org/" cloudflare_blocked_url = "https://cpasbiens3.fr/index.php?do=search&subaction=search" app = TestApp(flaresolverr.app) @@ -162,7 +162,7 @@ class TestFlareSolverr(unittest.TestCase): self.assertIn(self.ddos_guard_url, solution.url) self.assertEqual(solution.status, 200) self.assertIs(len(solution.headers), 0) - self.assertIn("AniDex", solution.response) + self.assertIn("Литрес", solution.response) self.assertGreater(len(solution.cookies), 0) self.assertIn("Chrome/", solution.userAgent) diff --git a/test-requirements.txt b/test-requirements.txt index accbb16..430b782 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1 +1 @@ -WebTest==3.0.6 +WebTest==3.0.7