unrealon 2.0.10__py3-none-any.whl → 2.0.11__py3-none-any.whl
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.
- {unrealon-2.0.10.dist-info → unrealon-2.0.11.dist-info}/METADATA +1 -1
- {unrealon-2.0.10.dist-info → unrealon-2.0.11.dist-info}/RECORD +14 -14
- unrealon_browser/managers/logger_bridge.py +3 -3
- unrealon_browser/managers/script_manager.py +45 -26
- unrealon_browser/stealth/{bypass_techniques.pyc → bypass_techniques.py} +0 -0
- unrealon_browser/stealth/manager.py +507 -0
- unrealon_browser/stealth/nodriver_stealth.py +432 -0
- unrealon_browser/stealth/playwright_stealth.py +179 -0
- unrealon_browser/stealth/scanner_tester.py +355 -0
- unrealon_browser/stealth/undetected_chrome.py +361 -0
- unrealon_browser/stealth/manager.pyc +0 -0
- unrealon_browser/stealth/nodriver_stealth.pyc +0 -0
- unrealon_browser/stealth/playwright_stealth.pyc +0 -0
- unrealon_browser/stealth/scanner_tester.pyc +0 -0
- unrealon_browser/stealth/undetected_chrome.pyc +0 -0
- {unrealon-2.0.10.dist-info → unrealon-2.0.11.dist-info}/LICENSE +0 -0
- {unrealon-2.0.10.dist-info → unrealon-2.0.11.dist-info}/WHEEL +0 -0
- {unrealon-2.0.10.dist-info → unrealon-2.0.11.dist-info}/entry_points.txt +0 -0
- {unrealon-2.0.10.dist-info → unrealon-2.0.11.dist-info}/top_level.txt +0 -0
|
@@ -18,17 +18,17 @@ unrealon_browser/dto/models/statistics.py,sha256=aIzJNV5r23VBxjhEoja4tXwI1Z7_UCw
|
|
|
18
18
|
unrealon_browser/managers/__init__.py,sha256=lpa93ggEN93ucoi4FqnCG_sn-_aRlP1As7DBRogDSsQ,591
|
|
19
19
|
unrealon_browser/managers/captcha.py,sha256=KGBO7sfq9XusAlcPByUFdIg-v6rlruzS2oHx-Zx28wo,21453
|
|
20
20
|
unrealon_browser/managers/cookies.py,sha256=r4VVnKLXH82vhU7qgtY-dF7KPf0Ie3QxGD3FEi6geFA,15085
|
|
21
|
-
unrealon_browser/managers/logger_bridge.py,sha256=
|
|
21
|
+
unrealon_browser/managers/logger_bridge.py,sha256=b6H9aq6AGv0s_g5bTH6ZFYoFINClsUejevlef3s1srw,10864
|
|
22
22
|
unrealon_browser/managers/page_wait_manager.py,sha256=UyZqiSfkjzahrxp9x1odXFIT_sFhZGvdECxWuIMCVBY,7876
|
|
23
23
|
unrealon_browser/managers/profile.py,sha256=HjddlSeUry_65WPtF8CMkT7cfJ6X3Jap9kJaaZpwtAA,18956
|
|
24
|
-
unrealon_browser/managers/script_manager.py,sha256=
|
|
24
|
+
unrealon_browser/managers/script_manager.py,sha256=hVnEWDb2LM1rfnptFo1MtE0SGcYCoFA66udykmb5e1g,11581
|
|
25
25
|
unrealon_browser/stealth/__init__.py,sha256=zUfkPPafYlPANLVQIy-Se11R_UjcJakUb3krCxxUK5Q,842
|
|
26
|
-
unrealon_browser/stealth/bypass_techniques.
|
|
27
|
-
unrealon_browser/stealth/manager.
|
|
28
|
-
unrealon_browser/stealth/nodriver_stealth.
|
|
29
|
-
unrealon_browser/stealth/playwright_stealth.
|
|
30
|
-
unrealon_browser/stealth/scanner_tester.
|
|
31
|
-
unrealon_browser/stealth/undetected_chrome.
|
|
26
|
+
unrealon_browser/stealth/bypass_techniques.py,sha256=eBOkYtWQZvw8SNGSim38VxkCsTJsx6OmjWJKR3GnSog,23582
|
|
27
|
+
unrealon_browser/stealth/manager.py,sha256=P3oFHKMpKrjl1Nw8JbtcLMNBtE5y0qOJgA-SdbAx1Y4,20435
|
|
28
|
+
unrealon_browser/stealth/nodriver_stealth.py,sha256=kYoWafDpaVBnbinLDaFNW4OstojEd54el9c1HewGIiE,14839
|
|
29
|
+
unrealon_browser/stealth/playwright_stealth.py,sha256=49zX2GbO7Iabh7TOoZqkip17cmVsMDjwPHCcs7EbizI,6683
|
|
30
|
+
unrealon_browser/stealth/scanner_tester.py,sha256=MTCKMIerOZxepfOw3tjXZo5_UOxN7JUX2jxxGFuWfig,16213
|
|
31
|
+
unrealon_browser/stealth/undetected_chrome.py,sha256=AjmxaygRmG2TNj2MAWHjB_-SoOCO8D0eDhLgtOu71Vw,13226
|
|
32
32
|
unrealon_core/__init__.py,sha256=ZAinyQDsAS63xqnl5uqUKTna9M-xFDs6fLwy8-Hh-X0,5599
|
|
33
33
|
unrealon_core/version.py,sha256=qZOlKA_Hsz7_KXsCLO_0l9Mf0u_iNTxvHZPV21DwCqs,5803
|
|
34
34
|
unrealon_core/config/__init__.py,sha256=57-KZaTDya0oyfOCfZ3pU1xLLbnZPBgqwfP9VrfhcKE,395
|
|
@@ -125,9 +125,9 @@ unrealon_driver/managers/threading.py,sha256=djw5cSC99dfBKmep3IJ_8IgxQceMXtNvCp5
|
|
|
125
125
|
unrealon_driver/managers/update.py,sha256=-hohVxGXpj5bZ6ZTQN6NH1RK9Pd6GVzCMtu3GS2SdcQ,3582
|
|
126
126
|
unrealon_driver/utils/__init__.py,sha256=qxXVoQJVdLJhaLBXk_LZV_062AhrvBrMPXWAKfEc3C4,104
|
|
127
127
|
unrealon_driver/utils/time.py,sha256=Oxk1eicKeZl8ZWbf7gu1Ll716k6CpXmVj67FHSnPIsA,184
|
|
128
|
-
unrealon-2.0.
|
|
129
|
-
unrealon-2.0.
|
|
130
|
-
unrealon-2.0.
|
|
131
|
-
unrealon-2.0.
|
|
132
|
-
unrealon-2.0.
|
|
133
|
-
unrealon-2.0.
|
|
128
|
+
unrealon-2.0.11.dist-info/LICENSE,sha256=eEH8mWZW49YMpl4Sh5MtKqkZ8aVTzKQXiNPEnvL14ns,1070
|
|
129
|
+
unrealon-2.0.11.dist-info/METADATA,sha256=ROMoMLZznLuLhKF9pDVigTdkiaGuoJRTbIbxel3sahY,15689
|
|
130
|
+
unrealon-2.0.11.dist-info/WHEEL,sha256=pL8R0wFFS65tNSRnaOVrsw9EOkOqxLrlUPenUYnJKNo,91
|
|
131
|
+
unrealon-2.0.11.dist-info/entry_points.txt,sha256=k0qM-eotpajkKUq-almJmxj9afhXprZ6IkvQkSdcKhI,104
|
|
132
|
+
unrealon-2.0.11.dist-info/top_level.txt,sha256=Gu8IeIfIVfUxdi-h-F0nKMQxo15pjhHZ0aTadXTpRE8,47
|
|
133
|
+
unrealon-2.0.11.dist-info/RECORD,,
|
|
@@ -168,17 +168,17 @@ class BrowserLoggerBridge:
|
|
|
168
168
|
)
|
|
169
169
|
|
|
170
170
|
def log_stealth_applied(self, success: bool = True) -> None:
|
|
171
|
-
"""Log stealth application
|
|
171
|
+
"""Log stealth application"""
|
|
172
172
|
self._browser_events["stealth_applied"] += 1
|
|
173
173
|
|
|
174
174
|
if success:
|
|
175
175
|
self._log_info(
|
|
176
|
-
"Stealth measures applied
|
|
176
|
+
"Stealth measures applied",
|
|
177
177
|
stealth_success=True,
|
|
178
178
|
)
|
|
179
179
|
else:
|
|
180
180
|
self._log_warning(
|
|
181
|
-
"Stealth application failed
|
|
181
|
+
"Stealth application failed",
|
|
182
182
|
stealth_success=False,
|
|
183
183
|
)
|
|
184
184
|
|
|
@@ -18,7 +18,8 @@ class ScriptManager:
|
|
|
18
18
|
def __init__(self, page: Optional[Page], logger_bridge: LoggingBridge):
|
|
19
19
|
self._page = page
|
|
20
20
|
self.logger_bridge = logger_bridge
|
|
21
|
-
|
|
21
|
+
self.allow_logging = False
|
|
22
|
+
|
|
22
23
|
# Statistics
|
|
23
24
|
self._scripts_executed = 0
|
|
24
25
|
self._scripts_successful = 0
|
|
@@ -29,7 +30,25 @@ class ScriptManager:
|
|
|
29
30
|
def update_page(self, page: Optional[Page]):
|
|
30
31
|
"""Update the page reference"""
|
|
31
32
|
self._page = page
|
|
32
|
-
|
|
33
|
+
|
|
34
|
+
def log_error(self, message: str):
|
|
35
|
+
"""Log error"""
|
|
36
|
+
if not self.allow_logging:
|
|
37
|
+
return
|
|
38
|
+
self.logger_bridge.log_error(message)
|
|
39
|
+
|
|
40
|
+
def log_info(self, message: str):
|
|
41
|
+
"""Log info"""
|
|
42
|
+
if not self.allow_logging:
|
|
43
|
+
return
|
|
44
|
+
self.logger_bridge.log_info(message)
|
|
45
|
+
|
|
46
|
+
def log_debug(self, message: str):
|
|
47
|
+
"""Log debug"""
|
|
48
|
+
if not self.allow_logging:
|
|
49
|
+
return
|
|
50
|
+
self.logger_bridge.log_debug(message)
|
|
51
|
+
|
|
33
52
|
async def execute_script(self, script: str, timeout: int = 30000) -> Any:
|
|
34
53
|
"""
|
|
35
54
|
Execute JavaScript code and return result
|
|
@@ -48,8 +67,8 @@ class ScriptManager:
|
|
|
48
67
|
self._scripts_executed += 1
|
|
49
68
|
|
|
50
69
|
try:
|
|
51
|
-
self.
|
|
52
|
-
self.
|
|
70
|
+
self.log_info(f"🔧 Executing JavaScript (timeout: {timeout}ms)")
|
|
71
|
+
self.log_debug(f"Script preview: {script[:100]}...")
|
|
53
72
|
|
|
54
73
|
# Execute script with timeout
|
|
55
74
|
result = await asyncio.wait_for(
|
|
@@ -70,8 +89,8 @@ class ScriptManager:
|
|
|
70
89
|
}
|
|
71
90
|
self._execution_history.append(execution_record)
|
|
72
91
|
|
|
73
|
-
self.
|
|
74
|
-
self.
|
|
92
|
+
self.log_info(f"✅ Script executed successfully ({duration_ms:.1f}ms)")
|
|
93
|
+
self.log_debug(f"Result type: {type(result).__name__}")
|
|
75
94
|
|
|
76
95
|
return result
|
|
77
96
|
|
|
@@ -88,7 +107,7 @@ class ScriptManager:
|
|
|
88
107
|
}
|
|
89
108
|
self._execution_history.append(execution_record)
|
|
90
109
|
|
|
91
|
-
self.
|
|
110
|
+
self.log_error(f"⏰ Script execution timeout ({timeout}ms)")
|
|
92
111
|
raise
|
|
93
112
|
|
|
94
113
|
except Exception as e:
|
|
@@ -104,7 +123,7 @@ class ScriptManager:
|
|
|
104
123
|
}
|
|
105
124
|
self._execution_history.append(execution_record)
|
|
106
125
|
|
|
107
|
-
self.
|
|
126
|
+
self.log_error(f"❌ Script execution failed: {e}")
|
|
108
127
|
raise
|
|
109
128
|
|
|
110
129
|
async def execute_api_call(self, api_url: str, headers: Dict[str, str], method: str = "GET", timeout: int = 30000) -> Dict[str, Any]:
|
|
@@ -145,14 +164,14 @@ class ScriptManager:
|
|
|
145
164
|
}})()
|
|
146
165
|
"""
|
|
147
166
|
|
|
148
|
-
self.
|
|
167
|
+
self.log_info(f"🌐 Making API call: {method} {api_url}")
|
|
149
168
|
|
|
150
169
|
result = await self.execute_script(script, timeout)
|
|
151
170
|
|
|
152
171
|
if isinstance(result, dict) and 'error' in result:
|
|
153
|
-
self.
|
|
172
|
+
self.log_error(f"❌ API call failed: {result['error']}")
|
|
154
173
|
else:
|
|
155
|
-
self.
|
|
174
|
+
self.log_info(f"✅ API call successful")
|
|
156
175
|
|
|
157
176
|
return result
|
|
158
177
|
|
|
@@ -198,17 +217,17 @@ class ScriptManager:
|
|
|
198
217
|
}})()
|
|
199
218
|
"""
|
|
200
219
|
|
|
201
|
-
self.
|
|
220
|
+
self.log_info(f"🎯 Waiting for element: {selector}")
|
|
202
221
|
|
|
203
222
|
try:
|
|
204
223
|
result = await self.execute_script(script, timeout + 1000)
|
|
205
224
|
if result:
|
|
206
|
-
self.
|
|
225
|
+
self.log_info(f"✅ Element found: {selector}")
|
|
207
226
|
else:
|
|
208
|
-
self.
|
|
227
|
+
self.log_warning(f"⏰ Element timeout: {selector}")
|
|
209
228
|
return result
|
|
210
229
|
except Exception as e:
|
|
211
|
-
self.
|
|
230
|
+
self.log_error(f"❌ Element wait failed: {selector} - {e}")
|
|
212
231
|
return False
|
|
213
232
|
|
|
214
233
|
async def inject_helper_functions(self) -> bool:
|
|
@@ -271,10 +290,10 @@ class ScriptManager:
|
|
|
271
290
|
|
|
272
291
|
try:
|
|
273
292
|
await self.execute_script(helper_script)
|
|
274
|
-
self.
|
|
293
|
+
self.log_info("🔧 Helper functions injected successfully")
|
|
275
294
|
return True
|
|
276
295
|
except Exception as e:
|
|
277
|
-
self.
|
|
296
|
+
self.log_error(f"❌ Failed to inject helper functions: {e}")
|
|
278
297
|
return False
|
|
279
298
|
|
|
280
299
|
def get_statistics(self) -> Dict[str, Any]:
|
|
@@ -294,21 +313,21 @@ class ScriptManager:
|
|
|
294
313
|
"""Print script execution statistics"""
|
|
295
314
|
stats = self.get_statistics()
|
|
296
315
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
316
|
+
print("\n🔧 Script Manager Statistics:")
|
|
317
|
+
print(f" Scripts executed: {stats['scripts_executed']}")
|
|
318
|
+
print(f" Successful: {stats['scripts_successful']}")
|
|
319
|
+
print(f" Failed: {stats['scripts_failed']}")
|
|
320
|
+
print(f" Success rate: {stats['success_rate']:.1f}%")
|
|
321
|
+
print(f" API calls made: {stats['api_calls_made']}")
|
|
303
322
|
|
|
304
323
|
# Show recent executions
|
|
305
324
|
if self._execution_history:
|
|
306
|
-
|
|
325
|
+
print(" Recent executions:")
|
|
307
326
|
for execution in self._execution_history[-3:]: # Show last 3
|
|
308
327
|
status = "✅" if execution["success"] else "❌"
|
|
309
|
-
|
|
328
|
+
print(f" {status} {execution['duration_ms']:.1f}ms")
|
|
310
329
|
|
|
311
330
|
def clear_history(self) -> None:
|
|
312
331
|
"""Clear execution history"""
|
|
313
332
|
self._execution_history.clear()
|
|
314
|
-
self.
|
|
333
|
+
self.log_info("🧹 Cleared script execution history")
|
|
Binary file
|