Commit Graph
53 Commits
Author SHA1 Message Date
daijro 3911d11dbd Support for releases with the same version and build v0.5.2
Fix for JWriter20 repo having several releases with the same version and build name, which broke the manager
- Installs browsers as version-build-sha256/ rather than version-build/ since assets can share a version-build combo
- Doesn't break existing downloads
- Show date column in gui and selector tui
2026-06-23 07:24:40 -05:00
daijro fdaffc03e9 Bump pythonlib to 0.5.1 2026-06-08 07:18:05 -05:00
daijro 61a9e1f9bb Update browserforge (remove manual model downloading) 2026-02-07 03:14:41 -06:00
daijro e0e2eeb2f3 Add version manager in python library 2026-02-07 02:47:01 -06:00
Julien Duponchelle df51462c43 Set minimum Python to 3.10 to solve Python 3.14 compatibility
When installing package using Poetry on Python 3.14 we have compilation
errors:

```
 copying src/greenlet/platform/setup_switch_x64_masm.cmd -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_aarch64_gcc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_alpha_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_amd64_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_arm32_gcc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_arm32_ios.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_arm64_masm.asm -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_arm64_masm.obj -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_arm64_msvc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_csky_gcc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_loongarch64_linux.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_m68k_gcc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_mips_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_ppc64_aix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_ppc64_linux.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_ppc_aix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_ppc_linux.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_ppc_macosx.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_ppc_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_riscv_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_s390_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_sh_gcc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_sparc_sun_gcc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_x32_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_x64_masm.asm -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_x64_masm.obj -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_x64_msvc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_x86_msvc.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/platform/switch_x86_unix.h -> build/lib.linux-x86_64-cpython-314/greenlet/platform
    | copying src/greenlet/tests/_test_extension.c -> build/lib.linux-x86_64-cpython-314/greenlet/tests
    | copying src/greenlet/tests/_test_extension_cpp.cpp -> build/lib.linux-x86_64-cpython-314/greenlet/tests
    | running build_ext
    | building 'greenlet._greenlet' extension
    | creating build/temp.linux-x86_64-cpython-314/src/greenlet
    | c++ -pthread -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fPIC -fPIC -I/tmp/tmp55zvtgm3/.venv/include -I/home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14 -c src/greenlet/greenlet.cpp -o build/temp.linux-x86_64-cpython-314/src/greenlet/greenlet.o
    | In file included from src/greenlet/greenlet.cpp:31:
    | src/greenlet/TGreenlet.cpp: In member function ‘void greenlet::Greenlet::expose_frames()’:
    | src/greenlet/TGreenlet.cpp:626:29: error: aggregate ‘_PyInterpreterFrame iframe_copy’ has incomplete type and cannot be defined
    |   626 |         _PyInterpreterFrame iframe_copy;
    |       |                             ^~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:627:65: error: invalid application of ‘sizeof’ to incomplete type ‘_PyInterpreterFrame’
    |   627 |         this->stack_state.copy_from_stack(&iframe_copy, iframe, sizeof(*iframe));
    |       |                                                                 ^~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:628:14: error: ‘_PyFrame_IsIncomplete’ was not declared in this scope
    |   628 |         if (!_PyFrame_IsIncomplete(&iframe_copy)) {
    |       |              ^~~~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:654:24: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   654 |             if (!iframe->frame_obj) {
    |       |                        ^~
    | In file included from /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/pyframe.h:19,
    |                  from /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/Python.h:113,
    |                  from src/greenlet/greenlet.cpp:16:
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:656:37: error: aggregate ‘_PyInterpreterFrame dummy_iframe’ has incomplete type and cannot be defined
    |   656 |                 _PyInterpreterFrame dummy_iframe;
    |       |                                     ^~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:661:38: error: ‘FRAME_OWNED_BY_GENERATOR’ was not declared in this scope
    |   661 |                 dummy_iframe.owner = FRAME_OWNED_BY_GENERATOR;
    |       |                                      ^~~~~~~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:686:45: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   686 |                 memcpy(&last_complete_iframe->frame_obj->_f_frame_data[0],
    |       |                                             ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:687:45: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   687 |                        &last_complete_iframe->previous, sizeof(void *));
    |       |                                             ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:688:37: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   688 |                 last_complete_iframe->previous = iframe;
    |       |                                     ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:705:37: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   705 |         memcpy(&last_complete_iframe->frame_obj->_f_frame_data[0],
    |       |                                     ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:706:37: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   706 |                &last_complete_iframe->previous, sizeof(void *));
    |       |                                     ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TGreenlet.cpp:707:29: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   707 |         last_complete_iframe->previous = nullptr;
    |       |                             ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | In file included from src/greenlet/greenlet.cpp:36:
    | src/greenlet/TPythonState.cpp: In member function ‘void greenlet::PythonState::operator<<(const PyThreadState*)’:
    | src/greenlet/TPythonState.cpp:137:31: error: ‘Py_C_RECURSION_LIMIT’ was not declared in this scope
    |   137 |     this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining;
    |       |                               ^~~~~~~~~~~~~~~~~~~~
    | src/greenlet/TPythonState.cpp:137:62: error: ‘const PyThreadState’ {aka ‘const struct _ts’} has no member named ‘c_recursion_remaining’; did you mean ‘py_recursion_remaining’?
    |   137 |     this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining;
    |       |                                                              ^~~~~~~~~~~~~~~~~~~~~
    |       |                                                              py_recursion_remaining
    | src/greenlet/TPythonState.cpp: In member function ‘void greenlet::PythonState::unexpose_frames()’:
    | src/greenlet/TPythonState.cpp:179:51: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   179 |         _PyInterpreterFrame *prev_exposed = iframe->previous;
    |       |                                                   ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TPythonState.cpp:181:23: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   181 |         memcpy(&iframe->previous, &iframe->frame_obj->_f_frame_data[0],
    |       |                       ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TPythonState.cpp:181:42: error: invalid use of incomplete type ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |   181 |         memcpy(&iframe->previous, &iframe->frame_obj->_f_frame_data[0],
    |       |                                          ^~
    | /home/jduponchelle/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/include/python3.14/cpython/pyframe.h:25:8: note: forward declaration of ‘_PyInterpreterFrame’ {aka ‘struct _PyInterpreterFrame’}
    |    25 | struct _PyInterpreterFrame;
    |       |        ^~~~~~~~~~~~~~~~~~~
    | src/greenlet/TPythonState.cpp: In member function ‘void greenlet::PythonState::operator>>(PyThreadState*)’:
    | src/greenlet/TPythonState.cpp:212:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘c_recursion_remaining’; did you mean ‘py_recursion_remaining’?
    |   212 |     tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth;
    |       |             ^~~~~~~~~~~~~~~~~~~~~
    |       |             py_recursion_remaining
    | src/greenlet/TPythonState.cpp:212:37: error: ‘Py_C_RECURSION_LIMIT’ was not declared in this scope
    |   212 |     tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth;
    |       |                                     ^~~~~~~~~~~~~~~~~~~~
    | error: command '/usr/bin/c++' failed with exit code 1

```

This due to the fact we are not installing a recent greenlet version
(3.1.1) due to the Python restriction.

By upgrading the minium Python version to 3.10 (minimum version
supported by the PSF https://devguide.python.org/versions/) the greenlet
module is now 3.3.1, it's the last available release.
2026-01-28 12:15:19 +01:00
daijro 0dabcb726d Add leak warning for block_images 0.4.11 #170 2025-01-29 03:32:40 -06:00
daijro a9b1934790 pythonlib: Add COOP toggle (workaround for #150) 0.4.10 2025-01-25 18:02:40 -06:00
daijro e3d3dcd6e7 pythonlib: Look for assets in earlier releases #134 0.4.9 2024-12-13 01:01:20 -06:00
daijro 9a9e61f660 pythonlib: Force Browserforge 1.2.1+
Apify's models have been contaminated in recent releases. Browserforge 1.2.1 reverts to a earlier model.
https://github.com/daijro/browserforge/issues/17
2024-12-11 05:48:25 -06:00
daijro 2422d622eb pythonlib: Auto offset Canvas anti-aliasing 2024-12-09 08:27:05 -06:00
daijro 2b7334c24f pythonlib: Bump to 0.4.7
Bugfix release including the fix for #114 by iSuslov.
2024-12-08 21:28:24 -06:00
daijro 4c52518dd2 pythonlib: Cleanup & bump to 0.4.6
- `camoufox test` will no longer highlight the cursor by default
- Fixed launch_options blocking async
- WebGL database cleanup & added ability to query all possible vendor/renderer pairs
2024-12-04 19:35:54 -06:00
daijro 31963aa83b pythonlib: Update WebGL sample database 2024-12-04 00:38:12 -06:00
daijro f6ef52a39b pythonlib: Support for main world evaluation 0.4.5 2024-12-03 22:58:08 -06:00
daijro 267b285faa pythonlib: Bump to 0.4.4 2024-11-28 22:30:57 -06:00
daijro cf3f8e6bde pythonlib: Fix WebGL injection causing crashing 0.4.4-beta 2024-11-25 00:20:27 -06:00
daijro 145b737069 pythonlib: [Rollback] Disable WebGL by default #90 0.4.3
Disables WebGL by default until a fix is available.
2024-11-22 11:13:43 -06:00
daijro 01aff40fc5 pythonlib: Rollback WebGL fingerprint injection 0.4.2
Rolling back WebGL injection temporarily until the crashing issue on certain devices is fixed.
2024-11-22 03:28:01 -06:00
daijro 673fdc7271 pythonlib: Hotfix imports 0.4.1 2024-11-21 21:11:08 -06:00
daijro af937cce55 pythonlib: WebGL rotation & leak fixes 0.4.0 2024-11-21 21:03:25 -06:00
daijro 01291d2ad1 pythonlib: Bump to 0.3.10 2024-11-18 02:32:20 -06:00
daijro 3a33283cd2 pythonlib: Add enable_cache, fixed font spacing, etc 0.3.9
- Enable bf cache with `enable_cache=True` #74
- Font spacing is now fixed per session #63
- Re-download (or raise error) when target install path is empty. Caused when the user cancels the download.
- Bumped minimum version to beta.15
2024-11-11 22:11:43 -06:00
daijro 964f49028c pythonlib: Fix broken import #70 0.3.8 2024-11-04 13:18:10 -06:00
daijro e6beecb3a9 pythonlib: Bump to 0.3.7 2024-11-03 04:16:09 -06:00
daijro 33189cd5b4 pythonlib: Fully fix #61 0.3.6 2024-10-31 06:42:47 -05:00
daijro 692e8a162c pythonlib: Support Python 3.8 #61 0.3.5 2024-10-31 05:09:17 -05:00
daijro 347885e9cb pythonlib: Default to http schema #57 0.3.4
Assume the proxy is using http schema when no other schema is specified.
2024-10-29 17:58:43 -05:00
daijro f94452fa93 pythonlib: Error handling for invalid addon paths & proxies 0.3.3
Help prevent confusion with using Camoufox addons #55
2024-10-28 17:40:42 -05:00
daijro 732d7bac8d Hotfix #51 0.3.2
Fixes missing VirtualDisplay import on non-Linux systems.
2024-10-27 20:26:00 -05:00
daijro 75ea7b0880 pythonlib: Set window size & kill Xvfb on browser close #49 #50
- Added window: Tuple[int, int] argument to set a fixed width and height #50
- Experimental fix to automatically terminate Xvfb on browser.close() #49
- Bump to 0.3.1
2024-10-27 20:03:11 -05:00
daijro 0ff90fc750 Version range control, multi locale usage, etc
- Python library now constrains the supported Camoufox version, and will force an update if you are out of date.
- Added support patch for multiple accepted languages #37
- Added pysocks #43
- Added README deprecation notices
- Added public launch_options command
- Bumped python library to 0.3.0
- Full support for beta.12
2024-10-19 23:10:51 -05:00
daijro 216718845c pythonlib: Add dict expected type 0.2.15
Adds support for beta.12.
2024-10-15 06:57:48 -05:00
daijro c448ec81ab More warnings & reformat README to avoid confusion/misuse 0.2.14
- Warns the user if they try to manually set the geolocation and locale.
- Move manual config documentation to the bottom of the README to discourage use.
- Make the parameters list more obvious.
2024-10-11 22:09:42 -05:00
daijro deddba00c3 Allow passing in a region or language into locale 0.2.13
- Passing in a region like `locale='US'` will generate a language based on the region, "US".
- Passing in a language like `locale='en'` will generate a region based on the language, "en".
- Fix locale parsing errors when generating using territoryInfo.xml #36
2024-10-11 21:36:19 -05:00
daijro 3e2551e65b pythonlib: Fix geolocation domain detection #31 0.2.12 2024-10-10 15:44:25 -05:00
daijro 76bedb5251 pythonlib: Hotfix screen property out of bounds 0.2.11
Adds back handling for when Browserforge screen properties are out of bounds.
2024-10-09 06:30:41 -05:00
daijro b2f74a24f3 Update pythonlib & README for beta.11
- Removed warnings for using headless mode
- Xvfb is now activated with headless='virtual'
- Correctly pass window.screenX & calculate window.screenY
- Update documentation on main README and pythonlib README
- Bumped pythonlib to 0.2.10
2024-10-09 05:49:22 -05:00
daijro bd59304481 pythonlib: Add Xvfb integration #26 0.2.9
- Automatically uses virtual displays on Linux
- Update documentation on README
2024-10-08 05:10:12 -05:00
daijro 351e99ed18 pythonlib: Add more leak warnings 0.2.8
Warns the user for when the passed parameters are likely to cause a leak.
2024-10-06 23:32:50 -05:00
daijro 4a1cd7ec64 pythonlib: Add headless detection warning #26 0.2.7
Raises a warning when headless mode is enabled in Camoufox.
This will be reverted once #26 is resolved.
2024-10-06 20:05:11 -05:00
daijro f3b68ab355 pythonlib: Assert OS is valid 0.2.6
- Removed mobile OS support due to detection issues
- Validate the passed os name & that its lowercase
2024-10-05 02:10:43 -05:00
daijro 2832673f83 pythonlib: Add persistent_context, humanize, etc. 0.2.5
- Added `persistent_context` parameter #21
- Added `humanize` parameter #22
- Added validation for custom fingerprints
- Updated Browserforge integration documentation
2024-10-04 19:04:16 -05:00
daijro 79c436e506 pythonlib: Add remote server launching #7
Uses a hacky work around to run Javascript in Playwright's internal library to gain access to the launchServer method.
2024-10-02 02:45:26 -05:00
daijro 7985eec493 pythonlib: Allow fetch without geoip 0.2.3
Fix fetch not checking if geoip2 is installed before trying to download the mmdb.
2024-10-02 00:09:42 -05:00
daijro ad55622550 pythonlib: Implement viewport hijacking 0.2.2
- Allow Browerforge fingerprints to override screen & viewport data.
- Set Camoufox's window dimensions to a fixed width/height generated from Browserforge.
- If the browser is headful, do not exceed 125% of the screen size.

Other changes:
- Allow public IP finder to work without verification.
- Add script to publish to pypi.
- More descriptive progress bars when downloading default addons.
- Bump to 0.2.2
2024-09-30 04:06:16 -05:00
daijro 7d825e53d9 pythonlib: Typing & environ var fixes 0.2.1
- Fixes typing with OS_NAME
- Fix exceeding environment variable length on Windows (caused by typing issue)
- Fix not passing fontconfig on Linux (caused by typing issue)
2024-09-29 17:30:11 -05:00
daijro f6396c1e81 pythonlib: Add locale, geolocation/locale from IP, & more 0.2.0
- Added `geoip` parameter to automatically find the target IP's longitude, latitude, timezone, country, language/region locale, & spoof the WebRTC IP address. #5
- Added parameter to set the locale #16
- Automatically calculate the locale based on the distribution of speakers in the target geoip region.
- Added allow_webgl option #17
- By default, use the current version of Camoufox instead of Browserforge's Firefox versions #14.
2024-09-29 17:30:00 -05:00
daijro f18b9a00be pythonlib: Add block_images, block_webrtc, fixes, etc. 0.1.3
- Adds block_images & block_webrtc parameters to Camoufox and AsyncCamoufox
- Fixes async_api
- Update README
2024-09-19 19:05:53 -05:00
daijro e487754a42 pythonlib: Re-enable BrowserForge userAgent 0.1.2
Prevent discrepancies between fonts, platform, and userAgents.
2024-09-19 18:44:48 -05:00
daijro 10b26ab56e pythonlib: Bump to 0.1.1 2024-09-19 16:40:16 -05:00