python-rucaptcha 6.2__tar.gz → 6.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. {python_rucaptcha-6.2/src/python_rucaptcha.egg-info → python_rucaptcha-6.3.1}/PKG-INFO +7 -18
  2. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/README.md +4 -15
  3. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/pyproject.toml +3 -5
  4. python_rucaptcha-6.3.1/src/python_rucaptcha/__version__.py +1 -0
  5. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/atb_captcha.py +3 -1
  6. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/core/base.py +16 -4
  7. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/core/result_handler.py +6 -2
  8. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/cutcaptcha.py +3 -1
  9. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/datadome_captcha.py +4 -2
  10. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/fun_captcha.py +3 -1
  11. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/lemin_captcha.py +3 -1
  12. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/rotate_captcha.py +2 -1
  13. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/tencent.py +2 -1
  14. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1/src/python_rucaptcha.egg-info}/PKG-INFO +7 -18
  15. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha.egg-info/requires.txt +1 -1
  16. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_audio.py +3 -1
  17. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_bounding_box.py +3 -1
  18. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_coordinates.py +3 -1
  19. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_draw_around.py +3 -1
  20. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_funcaptcha.py +1 -3
  21. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_geetest.py +3 -1
  22. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_grid.py +3 -1
  23. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_image.py +3 -1
  24. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_mtcaptcha.py +4 -1
  25. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_rotate.py +6 -2
  26. python_rucaptcha-6.2/src/python_rucaptcha/__version__.py +0 -1
  27. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/LICENSE +0 -0
  28. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/MANIFEST.in +0 -0
  29. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/setup.cfg +0 -0
  30. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/__init__.py +0 -0
  31. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/amazon_waf.py +0 -0
  32. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/audio_captcha.py +0 -0
  33. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/bounding_box_captcha.py +0 -0
  34. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/capy_puzzle.py +0 -0
  35. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/control.py +0 -0
  36. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/coordinates_captcha.py +0 -0
  37. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/core/__init__.py +0 -0
  38. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/core/config.py +0 -0
  39. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/core/enums.py +0 -0
  40. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/core/serializer.py +0 -0
  41. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/cyber_siara_captcha.py +0 -0
  42. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/draw_around_captcha.py +0 -0
  43. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/friendly_captcha.py +0 -0
  44. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/gee_test.py +0 -0
  45. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/grid_captcha.py +0 -0
  46. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/hcaptcha.py +0 -0
  47. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/image_captcha.py +0 -0
  48. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/key_captcha.py +0 -0
  49. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/mt_captcha.py +0 -0
  50. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/re_captcha.py +0 -0
  51. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/text_captcha.py +0 -0
  52. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha/turnstile.py +0 -0
  53. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha.egg-info/SOURCES.txt +0 -0
  54. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha.egg-info/dependency_links.txt +0 -0
  55. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/src/python_rucaptcha.egg-info/top_level.txt +0 -0
  56. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_amazon.py +0 -0
  57. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_capypuzzle.py +0 -0
  58. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_control.py +0 -0
  59. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_core.py +0 -0
  60. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_cutcaptcha.py +0 -0
  61. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_cybersiara.py +0 -0
  62. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_datadome.py +0 -0
  63. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_friendly_captcha.py +0 -0
  64. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_hcaptcha.py +0 -0
  65. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_key_captcha.py +0 -0
  66. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_lemin.py +0 -0
  67. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_recaptcha.py +0 -0
  68. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_tencent.py +0 -0
  69. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_text.py +0 -0
  70. {python_rucaptcha-6.2 → python_rucaptcha-6.3.1}/tests/test_turnstile.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-rucaptcha
3
- Version: 6.2
3
+ Version: 6.3.1
4
4
  Summary: Python 3.9+ RuCaptcha library with AIO module.
5
5
  Author-email: AndreiDrang <python-captcha@pm.me>
6
6
  License: MIT License
@@ -9,7 +9,7 @@ Project-URL: Documentation, https://andreidrang.github.io/python-rucaptcha/
9
9
  Project-URL: Repository, https://github.com/AndreiDrang/python-rucaptcha
10
10
  Project-URL: Issues, https://github.com/AndreiDrang/python-rucaptcha/issues
11
11
  Project-URL: Changelog, https://github.com/AndreiDrang/python-rucaptcha/releases
12
- Keywords: captcha,rucaptcha,2captcha,deathbycaptcha,recaptcha,geetest,hcaptcha,capypuzzle,tiktok,rotatecaptcha,funcaptcha,keycaptcha,python3,recaptcha,captcha,security,tiktok,tencent,atb_captcha,python-library,python-rucaptcha,rucaptcha-client,yandex,turnstile,amazon,amazon_waf,friendly-captcha
12
+ Keywords: captcha,rucaptcha,2captcha,deathbycaptcha,recaptcha,geetest,hcaptcha,capypuzzle,rotatecaptcha,funcaptcha,keycaptcha,python3,recaptcha,captcha,security,tencent,atb_captcha,python-library,python-rucaptcha,rucaptcha-client,yandex,turnstile,amazon,amazon_waf,friendly-captcha
13
13
  Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
15
15
  Classifier: Development Status :: 5 - Production/Stable
@@ -30,19 +30,15 @@ License-File: LICENSE
30
30
  Requires-Dist: requests>=2.21.0
31
31
  Requires-Dist: aiohttp>=3.9.2
32
32
  Requires-Dist: msgspec==0.18.*
33
- Requires-Dist: tenacity==8.*
33
+ Requires-Dist: tenacity<10,>=8
34
34
 
35
35
  # python-rucaptcha
36
36
 
37
- ![Logo](https://red-panda-dev.xyz/media/images/RuCaptchaHigh_zkkPoYF.original.png)
37
+ [![RuCaptchaHigh.png](https://s.vyjava.xyz/files/2024/12-December/17/45247a56/RuCaptchaHigh.png)](https://vyjava.xyz/dashboard/image/45247a56-3332-48ee-8df8-fc95bcfc52f0)
38
38
 
39
- ### [Capsolver](https://capsolver.com?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha)
39
+ ### [Capsolver](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
40
40
 
41
- [![Capsolver](files/capsolver.jpg)](https://capsolver.com?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha)
42
-
43
- [Capsolver.com](https://www.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha) is an AI-powered service that specializes in solving various types of captchas automatically. It supports captchas such as [reCAPTCHA V2](https://docs.capsolver.com/guide/captcha/ReCaptchaV2.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [reCAPTCHA V3](https://docs.capsolver.com/guide/captcha/ReCaptchaV3.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [hCaptcha](https://docs.capsolver.com/guide/captcha/HCaptcha.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [FunCaptcha](https://docs.capsolver.com/guide/captcha/FunCaptcha.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [DataDome](https://docs.capsolver.com/guide/captcha/DataDome.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [AWS Captcha](https://docs.capsolver.com/guide/captcha/awsWaf.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [Geetest](https://docs.capsolver.com/guide/captcha/Geetest.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), and Cloudflare [Captcha](https://docs.capsolver.com/guide/antibots/cloudflare_turnstile.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha) / [Challenge 5s](https://docs.capsolver.com/guide/antibots/cloudflare_challenge.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [Imperva / Incapsula](https://docs.capsolver.com/guide/antibots/imperva.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), among others.
44
-
45
- For developers, Capsolver offers API integration options detailed in their [documentation](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), facilitating the integration of captcha solving into applications. They also provide browser extensions for [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) and [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), making it easy to use their service directly within a browser. Different pricing packages are available to accommodate varying needs, ensuring flexibility for users.
41
+ [![capsolver.jpg](https://s.vyjava.xyz/files/2024/12-December/17/54e1db0e/capsolver.jpg)](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
46
42
 
47
43
  <hr>
48
44
 
@@ -75,13 +71,6 @@ If you have any questions, please send a message to the [Telegram](https://t.me/
75
71
 
76
72
  Or email python-captcha@pm.me
77
73
 
78
- ***
79
-
80
- You can check our other projects here - [RedPandaDev group](https://red-panda-dev.xyz/blog/). For example - [Torrents Tracker bot](https://t.me/torrents_tracker_bot) for Telegram.
81
-
82
- ***
83
-
84
-
85
74
  ## How to install?
86
75
 
87
76
  ### pip
@@ -114,4 +103,4 @@ For full changelog info check - [Releases page](https://github.com/AndreiDrang/p
114
103
 
115
104
  ### Get API Key to work with the library
116
105
  1. On the page - https://rucaptcha.com/enterpage
117
- 2. Find it: ![img.png](https://github.com/AndreiDrang/python-rucaptcha/blob/master/files/img.png)
106
+ 2. Find it: [![img.png](https://s.vyjava.xyz/files/2024/12-December/17/ac679557/img.png)](https://vyjava.xyz/dashboard/image/ac679557-f3cc-402f-bf95-6c45d252a2ef)
@@ -1,14 +1,10 @@
1
1
  # python-rucaptcha
2
2
 
3
- ![Logo](https://red-panda-dev.xyz/media/images/RuCaptchaHigh_zkkPoYF.original.png)
3
+ [![RuCaptchaHigh.png](https://s.vyjava.xyz/files/2024/12-December/17/45247a56/RuCaptchaHigh.png)](https://vyjava.xyz/dashboard/image/45247a56-3332-48ee-8df8-fc95bcfc52f0)
4
4
 
5
- ### [Capsolver](https://capsolver.com?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha)
5
+ ### [Capsolver](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
6
6
 
7
- [![Capsolver](files/capsolver.jpg)](https://capsolver.com?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha)
8
-
9
- [Capsolver.com](https://www.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha) is an AI-powered service that specializes in solving various types of captchas automatically. It supports captchas such as [reCAPTCHA V2](https://docs.capsolver.com/guide/captcha/ReCaptchaV2.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [reCAPTCHA V3](https://docs.capsolver.com/guide/captcha/ReCaptchaV3.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [hCaptcha](https://docs.capsolver.com/guide/captcha/HCaptcha.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [FunCaptcha](https://docs.capsolver.com/guide/captcha/FunCaptcha.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [DataDome](https://docs.capsolver.com/guide/captcha/DataDome.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [AWS Captcha](https://docs.capsolver.com/guide/captcha/awsWaf.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [Geetest](https://docs.capsolver.com/guide/captcha/Geetest.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), and Cloudflare [Captcha](https://docs.capsolver.com/guide/antibots/cloudflare_turnstile.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha) / [Challenge 5s](https://docs.capsolver.com/guide/antibots/cloudflare_challenge.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [Imperva / Incapsula](https://docs.capsolver.com/guide/antibots/imperva.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), among others.
10
-
11
- For developers, Capsolver offers API integration options detailed in their [documentation](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), facilitating the integration of captcha solving into applications. They also provide browser extensions for [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) and [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), making it easy to use their service directly within a browser. Different pricing packages are available to accommodate varying needs, ensuring flexibility for users.
7
+ [![capsolver.jpg](https://s.vyjava.xyz/files/2024/12-December/17/54e1db0e/capsolver.jpg)](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
12
8
 
13
9
  <hr>
14
10
 
@@ -41,13 +37,6 @@ If you have any questions, please send a message to the [Telegram](https://t.me/
41
37
 
42
38
  Or email python-captcha@pm.me
43
39
 
44
- ***
45
-
46
- You can check our other projects here - [RedPandaDev group](https://red-panda-dev.xyz/blog/). For example - [Torrents Tracker bot](https://t.me/torrents_tracker_bot) for Telegram.
47
-
48
- ***
49
-
50
-
51
40
  ## How to install?
52
41
 
53
42
  ### pip
@@ -80,4 +69,4 @@ For full changelog info check - [Releases page](https://github.com/AndreiDrang/p
80
69
 
81
70
  ### Get API Key to work with the library
82
71
  1. On the page - https://rucaptcha.com/enterpage
83
- 2. Find it: ![img.png](https://github.com/AndreiDrang/python-rucaptcha/blob/master/files/img.png)
72
+ 2. Find it: [![img.png](https://s.vyjava.xyz/files/2024/12-December/17/ac679557/img.png)](https://vyjava.xyz/dashboard/image/ac679557-f3cc-402f-bf95-6c45d252a2ef)
@@ -1,5 +1,5 @@
1
1
  [tool.black]
2
- line-length = 120
2
+ line-length = 110
3
3
  target-version = ['py311']
4
4
  exclude = '''
5
5
  /(
@@ -18,7 +18,7 @@ exclude = '''
18
18
  [tool.isort]
19
19
  profile = "black"
20
20
  skip_glob = "examples/**"
21
- line_length = 120
21
+ line_length = 110
22
22
  length_sort = true
23
23
 
24
24
  [tool.pytest.ini_options]
@@ -50,7 +50,6 @@ keywords = [ "captcha",
50
50
  "geetest",
51
51
  "hcaptcha",
52
52
  "capypuzzle",
53
- "tiktok",
54
53
  "rotatecaptcha",
55
54
  "funcaptcha",
56
55
  "keycaptcha",
@@ -58,7 +57,6 @@ keywords = [ "captcha",
58
57
  "recaptcha",
59
58
  "captcha",
60
59
  "security",
61
- "tiktok",
62
60
  "tencent",
63
61
  "atb_captcha",
64
62
  "python-library",
@@ -91,7 +89,7 @@ dependencies = [
91
89
  "requests>=2.21.0",
92
90
  "aiohttp>=3.9.2",
93
91
  "msgspec==0.18.*",
94
- "tenacity==8.*"
92
+ "tenacity>=8,<10"
95
93
  ]
96
94
 
97
95
  [tool.setuptools.packages.find]
@@ -0,0 +1 @@
1
+ __version__ = "6.3.1"
@@ -75,7 +75,9 @@ class atbCaptcha(BaseCaptcha):
75
75
  """
76
76
  super().__init__(method=method, *args, **kwargs)
77
77
 
78
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "appId": appId, "apiServer": apiServer})
78
+ self.create_task_payload["task"].update(
79
+ {"websiteURL": websiteURL, "appId": appId, "apiServer": apiServer}
80
+ )
79
81
 
80
82
  # check user params
81
83
  if method not in atbCaptchaEnm.list_values():
@@ -12,7 +12,13 @@ from requests.adapters import HTTPAdapter
12
12
 
13
13
  from .enums import ServiceEnm, SaveFormatsEnm
14
14
  from .config import RETRIES, ASYNC_RETRIES
15
- from .serializer import TaskSer, CaptchaOptionsSer, CreateTaskBaseSer, GetTaskResultRequestSer, GetTaskResultResponseSer
15
+ from .serializer import (
16
+ TaskSer,
17
+ CaptchaOptionsSer,
18
+ CreateTaskBaseSer,
19
+ GetTaskResultRequestSer,
20
+ GetTaskResultResponseSer,
21
+ )
16
22
  from .result_handler import get_sync_result, get_async_result
17
23
 
18
24
 
@@ -79,7 +85,9 @@ class BaseCaptcha:
79
85
  time.sleep(self.params.sleep_time)
80
86
 
81
87
  return get_sync_result(
82
- get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, url_response=self.params.url_response
88
+ get_payload=self.get_task_payload,
89
+ sleep_time=self.params.sleep_time,
90
+ url_response=self.params.url_response,
83
91
  )
84
92
 
85
93
  def url_open(self, url: str, **kwargs):
@@ -174,7 +182,9 @@ class BaseCaptcha:
174
182
  )
175
183
  # if the file is transferred in base64 encoding
176
184
  elif captcha_base64:
177
- self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")})
185
+ self.create_task_payload["task"].update(
186
+ {"body": base64.b64encode(captcha_base64).decode("utf-8")}
187
+ )
178
188
  # if a URL is passed
179
189
  elif captcha_link:
180
190
  try:
@@ -209,7 +219,9 @@ class BaseCaptcha:
209
219
  )
210
220
  # if the file is transferred in base64 encoding
211
221
  elif captcha_base64:
212
- self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")})
222
+ self.create_task_payload["task"].update(
223
+ {"body": base64.b64encode(captcha_base64).decode("utf-8")}
224
+ )
213
225
  # if a URL is passed
214
226
  elif captcha_link:
215
227
  try:
@@ -10,7 +10,9 @@ from .config import attempts_generator
10
10
  from .serializer import GetTaskResultRequestSer, GetTaskResultResponseSer
11
11
 
12
12
 
13
- def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str) -> Union[dict, Exception]:
13
+ def get_sync_result(
14
+ get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str
15
+ ) -> Union[dict, Exception]:
14
16
  """
15
17
  Function periodically send the SYNC request to service and wait for captcha solving result
16
18
  """
@@ -48,7 +50,9 @@ async def get_async_result(
48
50
  for _ in attempts:
49
51
  try:
50
52
  # send a request for the result of solving the captcha
51
- async with session.post(url_response, json=get_payload.to_dict(), raise_for_status=True) as resp:
53
+ async with session.post(
54
+ url_response, json=get_payload.to_dict(), raise_for_status=True
55
+ ) as resp:
52
56
  captcha_response = await resp.json(content_type=None)
53
57
  captcha_response = GetTaskResultResponseSer(**captcha_response, taskId=get_payload.taskId)
54
58
 
@@ -81,7 +81,9 @@ class CutCaptcha(BaseCaptcha):
81
81
  """
82
82
  super().__init__(method=method, *args, **kwargs)
83
83
 
84
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "miseryKey": miseryKey, "apiKey": apiKey})
84
+ self.create_task_payload["task"].update(
85
+ {"websiteURL": websiteURL, "miseryKey": miseryKey, "apiKey": apiKey}
86
+ )
85
87
 
86
88
  # check user params
87
89
  if method not in CutCaptchaEnm.list_values():
@@ -20,8 +20,10 @@ class DataDomeCaptcha(BaseCaptcha):
20
20
  Args:
21
21
  rucaptcha_key: User API key
22
22
  websiteURL: Full URL of the captcha page
23
- captchaUrl: The value of the `src` parameter for the `iframe` element containing the captcha on the page.
24
- userAgent: User-Agent of your browser will be used to load the captcha. Use only modern browser's User-Agents
23
+ captchaUrl: The value of the `src` parameter for the `iframe` element
24
+ containing the captcha on the page.
25
+ userAgent: User-Agent of your browser will be used to load the captcha.
26
+ Use only modern browser's User-Agents
25
27
  proxyType: Proxy type - `http`, `socks4`, `socks5`
26
28
  proxyAddress: Proxy IP address or hostname
27
29
  proxyPort: Proxy port
@@ -69,7 +69,9 @@ class FunCaptcha(BaseCaptcha):
69
69
  """
70
70
  super().__init__(method=method, *args, **kwargs)
71
71
 
72
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "websitePublicKey": websitePublicKey})
72
+ self.create_task_payload["task"].update(
73
+ {"websiteURL": websiteURL, "websitePublicKey": websitePublicKey}
74
+ )
73
75
 
74
76
  # check user params
75
77
  if method not in FunCaptchaEnm.list_values():
@@ -78,7 +78,9 @@ class LeminCaptcha(BaseCaptcha):
78
78
  """
79
79
  super().__init__(method=method, *args, **kwargs)
80
80
 
81
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "captchaId": captchaId, "div_id": div_id})
81
+ self.create_task_payload["task"].update(
82
+ {"websiteURL": websiteURL, "captchaId": captchaId, "div_id": div_id}
83
+ )
82
84
 
83
85
  # check user params
84
86
  if method not in LeminCaptchaEnm.list_values():
@@ -74,7 +74,8 @@ class RotateCaptcha(BaseCaptcha):
74
74
  }
75
75
 
76
76
  >>> await RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122",
77
- ... angle=45).aio_captcha_handler(captcha_file="examples/rotate/rotate_ex.png")
77
+ ... angle=45).aio_captcha_handler(
78
+ ... captcha_file="examples/rotate/rotate_ex.png")
78
79
  {
79
80
  "errorId":0,
80
81
  "status":"ready",
@@ -19,7 +19,8 @@ class Tencent(BaseCaptcha):
19
19
  Args:
20
20
  rucaptcha_key: User API key
21
21
  websiteURL: The full URL of target web page where the captcha is loaded.
22
- We do not open the page, not a problem if it is available only for authenticated users
22
+ We do not open the page, not a problem if it is available
23
+ only for authenticated users
23
24
  appId: The value of `appId` parameter in the website source code.
24
25
  method: Captcha type
25
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-rucaptcha
3
- Version: 6.2
3
+ Version: 6.3.1
4
4
  Summary: Python 3.9+ RuCaptcha library with AIO module.
5
5
  Author-email: AndreiDrang <python-captcha@pm.me>
6
6
  License: MIT License
@@ -9,7 +9,7 @@ Project-URL: Documentation, https://andreidrang.github.io/python-rucaptcha/
9
9
  Project-URL: Repository, https://github.com/AndreiDrang/python-rucaptcha
10
10
  Project-URL: Issues, https://github.com/AndreiDrang/python-rucaptcha/issues
11
11
  Project-URL: Changelog, https://github.com/AndreiDrang/python-rucaptcha/releases
12
- Keywords: captcha,rucaptcha,2captcha,deathbycaptcha,recaptcha,geetest,hcaptcha,capypuzzle,tiktok,rotatecaptcha,funcaptcha,keycaptcha,python3,recaptcha,captcha,security,tiktok,tencent,atb_captcha,python-library,python-rucaptcha,rucaptcha-client,yandex,turnstile,amazon,amazon_waf,friendly-captcha
12
+ Keywords: captcha,rucaptcha,2captcha,deathbycaptcha,recaptcha,geetest,hcaptcha,capypuzzle,rotatecaptcha,funcaptcha,keycaptcha,python3,recaptcha,captcha,security,tencent,atb_captcha,python-library,python-rucaptcha,rucaptcha-client,yandex,turnstile,amazon,amazon_waf,friendly-captcha
13
13
  Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
15
15
  Classifier: Development Status :: 5 - Production/Stable
@@ -30,19 +30,15 @@ License-File: LICENSE
30
30
  Requires-Dist: requests>=2.21.0
31
31
  Requires-Dist: aiohttp>=3.9.2
32
32
  Requires-Dist: msgspec==0.18.*
33
- Requires-Dist: tenacity==8.*
33
+ Requires-Dist: tenacity<10,>=8
34
34
 
35
35
  # python-rucaptcha
36
36
 
37
- ![Logo](https://red-panda-dev.xyz/media/images/RuCaptchaHigh_zkkPoYF.original.png)
37
+ [![RuCaptchaHigh.png](https://s.vyjava.xyz/files/2024/12-December/17/45247a56/RuCaptchaHigh.png)](https://vyjava.xyz/dashboard/image/45247a56-3332-48ee-8df8-fc95bcfc52f0)
38
38
 
39
- ### [Capsolver](https://capsolver.com?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha)
39
+ ### [Capsolver](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
40
40
 
41
- [![Capsolver](files/capsolver.jpg)](https://capsolver.com?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha)
42
-
43
- [Capsolver.com](https://www.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha) is an AI-powered service that specializes in solving various types of captchas automatically. It supports captchas such as [reCAPTCHA V2](https://docs.capsolver.com/guide/captcha/ReCaptchaV2.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [reCAPTCHA V3](https://docs.capsolver.com/guide/captcha/ReCaptchaV3.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [hCaptcha](https://docs.capsolver.com/guide/captcha/HCaptcha.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [FunCaptcha](https://docs.capsolver.com/guide/captcha/FunCaptcha.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [DataDome](https://docs.capsolver.com/guide/captcha/DataDome.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [AWS Captcha](https://docs.capsolver.com/guide/captcha/awsWaf.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [Geetest](https://docs.capsolver.com/guide/captcha/Geetest.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), and Cloudflare [Captcha](https://docs.capsolver.com/guide/antibots/cloudflare_turnstile.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha) / [Challenge 5s](https://docs.capsolver.com/guide/antibots/cloudflare_challenge.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), [Imperva / Incapsula](https://docs.capsolver.com/guide/antibots/imperva.html?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), among others.
44
-
45
- For developers, Capsolver offers API integration options detailed in their [documentation](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=python-rucaptcha), facilitating the integration of captcha solving into applications. They also provide browser extensions for [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) and [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), making it easy to use their service directly within a browser. Different pricing packages are available to accommodate varying needs, ensuring flexibility for users.
41
+ [![capsolver.jpg](https://s.vyjava.xyz/files/2024/12-December/17/54e1db0e/capsolver.jpg)](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
46
42
 
47
43
  <hr>
48
44
 
@@ -75,13 +71,6 @@ If you have any questions, please send a message to the [Telegram](https://t.me/
75
71
 
76
72
  Or email python-captcha@pm.me
77
73
 
78
- ***
79
-
80
- You can check our other projects here - [RedPandaDev group](https://red-panda-dev.xyz/blog/). For example - [Torrents Tracker bot](https://t.me/torrents_tracker_bot) for Telegram.
81
-
82
- ***
83
-
84
-
85
74
  ## How to install?
86
75
 
87
76
  ### pip
@@ -114,4 +103,4 @@ For full changelog info check - [Releases page](https://github.com/AndreiDrang/p
114
103
 
115
104
  ### Get API Key to work with the library
116
105
  1. On the page - https://rucaptcha.com/enterpage
117
- 2. Find it: ![img.png](https://github.com/AndreiDrang/python-rucaptcha/blob/master/files/img.png)
106
+ 2. Find it: [![img.png](https://s.vyjava.xyz/files/2024/12-December/17/ac679557/img.png)](https://vyjava.xyz/dashboard/image/ac679557-f3cc-402f-bf95-6c45d252a2ef)
@@ -1,4 +1,4 @@
1
1
  requests>=2.21.0
2
2
  aiohttp>=3.9.2
3
3
  msgspec==0.18.*
4
- tenacity==8.*
4
+ tenacity<10,>=8
@@ -165,7 +165,9 @@ class TestAudioCaptcha(BaseTest):
165
165
  def test_wrong_base64(self):
166
166
  instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY)
167
167
 
168
- result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8"))
168
+ result = instance.captcha_handler(
169
+ captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")
170
+ )
169
171
 
170
172
  assert isinstance(result, dict) is True
171
173
  assert result["errorId"] in (12, 5)
@@ -134,7 +134,9 @@ class TestBoundingBoxCaptcha(BaseTest):
134
134
 
135
135
  def test_wrong_base64(self):
136
136
  instance = BoundingBoxCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY)
137
- result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8"))
137
+ result = instance.captcha_handler(
138
+ captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")
139
+ )
138
140
  assert isinstance(result, dict) is True
139
141
  assert result["errorId"] == 15
140
142
  assert result["taskId"] is None
@@ -134,7 +134,9 @@ class TestCoordinatesCaptcha(BaseTest):
134
134
 
135
135
  def test_wrong_base64(self):
136
136
  instance = CoordinatesCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY)
137
- result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8"))
137
+ result = instance.captcha_handler(
138
+ captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")
139
+ )
138
140
  assert isinstance(result, dict) is True
139
141
  assert result["errorId"] == 15
140
142
  assert result["taskId"] is None
@@ -134,7 +134,9 @@ class TestDrawAroundCaptcha(BaseTest):
134
134
 
135
135
  def test_wrong_base64(self):
136
136
  instance = DrawAroundCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY)
137
- result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8"))
137
+ result = instance.captcha_handler(
138
+ captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")
139
+ )
138
140
  assert isinstance(result, dict) is True
139
141
  assert result["errorId"] == 15
140
142
  assert result["taskId"] is None
@@ -8,9 +8,7 @@ from python_rucaptcha.core.serializer import GetTaskResultResponseSer
8
8
 
9
9
  class TestFunCaptcha(BaseTest):
10
10
  publickey = "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC"
11
- pageurl = (
12
- "https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en"
13
- )
11
+ pageurl = "https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en"
14
12
  surl = "https://client-api.arkoselabs.com"
15
13
  kwargs_params = {
16
14
  "funcaptchaApiJSSubdomain": "sample-api.arkoselabs.com",
@@ -15,7 +15,9 @@ class TestGeeTestBase(BaseTest):
15
15
 
16
16
  @property
17
17
  def challenge(self):
18
- return requests.get("https://www.geetest.com/demo/gt/register-enFullpage-official").json()["challenge"]
18
+ return requests.get("https://www.geetest.com/demo/gt/register-enFullpage-official").json()[
19
+ "challenge"
20
+ ]
19
21
 
20
22
 
21
23
  class TestGeeTestCore(TestGeeTestBase):
@@ -136,7 +136,9 @@ class TestGridCaptcha(BaseTest):
136
136
 
137
137
  def test_wrong_base64(self):
138
138
  instance = GridCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY)
139
- result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8"))
139
+ result = instance.captcha_handler(
140
+ captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")
141
+ )
140
142
  assert isinstance(result, dict) is True
141
143
  assert result["errorId"] == 15
142
144
  assert result["taskId"] is None
@@ -165,7 +165,9 @@ class TestImageCaptcha(BaseTest):
165
165
 
166
166
  def test_wrong_base64(self):
167
167
  instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY)
168
- result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8"))
168
+ result = instance.captcha_handler(
169
+ captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")
170
+ )
169
171
  assert isinstance(result, dict) is True
170
172
  assert result["errorId"] == 15
171
173
  assert result["taskId"] is None
@@ -22,7 +22,10 @@ class TestMTCaptcha(BaseTest):
22
22
  @pytest.mark.parametrize("method", MTCaptchaEnm.list_values())
23
23
  def test_args(self, method: str):
24
24
  instance = MTCaptcha(
25
- rucaptcha_key=self.RUCAPTCHA_KEY, websiteURL=self.websiteURL, websiteKey=self.websiteKey, method=method
25
+ rucaptcha_key=self.RUCAPTCHA_KEY,
26
+ websiteURL=self.websiteURL,
27
+ websiteKey=self.websiteKey,
28
+ method=method,
26
29
  )
27
30
  assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY
28
31
  assert instance.create_task_payload["task"]["type"] == method
@@ -136,7 +136,9 @@ class TestRotateCaptcha(BaseTest):
136
136
  @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values())
137
137
  @pytest.mark.parametrize("img_clearing", (True, False))
138
138
  def test_const_data_link(self, save_format: str, img_clearing: bool):
139
- instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format, img_clearing=img_clearing)
139
+ instance = RotateCaptcha(
140
+ rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format, img_clearing=img_clearing
141
+ )
140
142
 
141
143
  result = instance.captcha_handler(captcha_link=self.captcha_url)
142
144
 
@@ -199,7 +201,9 @@ class TestRotateCaptcha(BaseTest):
199
201
  def test_wrong_base64(self):
200
202
  instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY)
201
203
 
202
- result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8"))
204
+ result = instance.captcha_handler(
205
+ captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")
206
+ )
203
207
 
204
208
  assert isinstance(result, dict) is True
205
209
  assert result["errorId"] != 0
@@ -1 +0,0 @@
1
- __version__ = "6.2"
File without changes