qrpa 1.0.87__tar.gz → 1.0.89__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.
Potentially problematic release.
This version of qrpa might be problematic. Click here for more details.
- {qrpa-1.0.87 → qrpa-1.0.89}/PKG-INFO +1 -1
- {qrpa-1.0.87 → qrpa-1.0.89}/pyproject.toml +1 -1
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/shein_lib.py +51 -12
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa.egg-info/PKG-INFO +1 -1
- {qrpa-1.0.87 → qrpa-1.0.89}/README.md +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/RateLimitedSender.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/__init__.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/db_migrator.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/feishu_bot_app.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/feishu_client.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/feishu_logic.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/fun_base.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/fun_excel.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/fun_file.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/fun_web.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/fun_win.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/mysql_module/__init__.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/mysql_module/shein_product_model.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/mysql_module/shein_return_order_model.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/shein_daily_report_model.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/shein_excel.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/shein_mysql.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/shein_sqlite.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/shein_ziniao.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/temu_chrome.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/temu_excel.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/temu_lib.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/time_utils.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/time_utils_example.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa/wxwork.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa.egg-info/SOURCES.txt +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa.egg-info/dependency_links.txt +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/qrpa.egg-info/top_level.txt +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/setup.cfg +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/setup.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/tests/test_db_migrator.py +0 -0
- {qrpa-1.0.87 → qrpa-1.0.89}/tests/test_wxwork.py +0 -0
|
@@ -31,19 +31,43 @@ class SheinLib:
|
|
|
31
31
|
def deal_auth(self):
|
|
32
32
|
web_page = self.web_page
|
|
33
33
|
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
log(f"当前页面URL: {web_page.url}, 标题: {web_page.title()}", self.store_username, self.store_name)
|
|
37
|
-
web_page.wait_for_load_state("domcontentloaded", timeout=5000)
|
|
38
|
-
log("页面DOM加载完成", self.store_username, self.store_name)
|
|
39
|
-
except Exception as e:
|
|
40
|
-
log(f"等待页面DOM加载超时: {e}, URL: {web_page.url}", self.store_username, self.store_name)
|
|
34
|
+
# 等待页面稳定并处理导航
|
|
35
|
+
for attempt in range(3):
|
|
41
36
|
try:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
current_url = web_page.url
|
|
38
|
+
log(f"尝试获取页面信息 - URL: {current_url}", self.store_username, self.store_name)
|
|
39
|
+
|
|
40
|
+
# 检查是否在认证页面,如果是则直接跳转到目标页面
|
|
41
|
+
if '/auth/SSLS' in current_url:
|
|
42
|
+
log("检测到SSLS认证页面,直接跳转到首页", self.store_username, self.store_name)
|
|
43
|
+
web_page.goto('https://sso.geiwohuo.com/#/home', wait_until='domcontentloaded', timeout=15000)
|
|
44
|
+
web_page.wait_for_timeout(3000)
|
|
45
|
+
current_url = web_page.url
|
|
46
|
+
log(f"跳转后URL: {current_url}", self.store_username, self.store_name)
|
|
47
|
+
|
|
48
|
+
# 等待导航完成
|
|
49
|
+
web_page.wait_for_load_state("domcontentloaded", timeout=6000)
|
|
50
|
+
|
|
51
|
+
final_url = web_page.url
|
|
52
|
+
final_title = web_page.title()
|
|
53
|
+
log(f"页面稳定 - URL: {final_url}, 标题: {final_title}", self.store_username, self.store_name)
|
|
54
|
+
break
|
|
55
|
+
|
|
56
|
+
except Exception as e:
|
|
57
|
+
log(f"第{attempt+1}次等待页面稳定失败: {e}", self.store_username, self.store_name)
|
|
58
|
+
if "crashed" in str(e) or "Target" in str(e):
|
|
59
|
+
log("页面稳定检查时崩溃,直接继续", self.store_username, self.store_name)
|
|
60
|
+
break
|
|
61
|
+
elif "destroyed" in str(e) or "navigation" in str(e):
|
|
62
|
+
log("检测到导航中断,等待导航完成", self.store_username, self.store_name)
|
|
63
|
+
web_page.wait_for_timeout(4000)
|
|
64
|
+
continue
|
|
65
|
+
elif attempt == 2:
|
|
66
|
+
log("页面稳定等待最终失败,继续执行", self.store_username, self.store_name)
|
|
67
|
+
break
|
|
68
|
+
web_page.wait_for_timeout(2000)
|
|
45
69
|
|
|
46
|
-
web_page.wait_for_timeout(
|
|
70
|
+
web_page.wait_for_timeout(2000)
|
|
47
71
|
|
|
48
72
|
# 定义最大重试次数
|
|
49
73
|
MAX_RETRIES = 5
|
|
@@ -64,8 +88,18 @@ class SheinLib:
|
|
|
64
88
|
current_url = web_page.url
|
|
65
89
|
current_title = web_page.title()
|
|
66
90
|
log(f"循环检查 - URL: {current_url}, 标题: {current_title}", self.store_username, self.store_name)
|
|
91
|
+
|
|
92
|
+
# 如果在认证页面且出现问题,直接跳转
|
|
93
|
+
if '/auth/SSLS' in current_url:
|
|
94
|
+
log("在主循环中检测到SSLS认证页面,跳转到首页", self.store_username, self.store_name)
|
|
95
|
+
web_page.goto('https://sso.geiwohuo.com/#/home', wait_until='domcontentloaded', timeout=15000)
|
|
96
|
+
web_page.wait_for_timeout(3000)
|
|
97
|
+
continue
|
|
98
|
+
|
|
67
99
|
except Exception as status_error:
|
|
68
100
|
log(f"获取页面状态失败: {status_error}", self.store_username, self.store_name)
|
|
101
|
+
if "crashed" in str(status_error):
|
|
102
|
+
break
|
|
69
103
|
|
|
70
104
|
if web_page.locator('xpath=//div[@id="container" and @alita-name="gmpsso"]//button[@type="button" and @id]').nth(0).is_visible():
|
|
71
105
|
if 'https://sso.geiwohuo.com/#/home' not in web_page.url:
|
|
@@ -184,10 +218,15 @@ class SheinLib:
|
|
|
184
218
|
except:
|
|
185
219
|
log("无法获取崩溃时的页面信息", self.store_username, self.store_name)
|
|
186
220
|
|
|
187
|
-
#
|
|
221
|
+
# 检查特定类型的错误
|
|
188
222
|
if any(keyword in str(e).lower() for keyword in ['memory', 'out of memory', 'oom']):
|
|
189
223
|
log("检测到内存相关崩溃", self.store_username, self.store_name)
|
|
190
224
|
|
|
225
|
+
if "destroyed" in str(e) or "navigation" in str(e):
|
|
226
|
+
log("检测到导航中断,等待页面稳定后重试", self.store_username, self.store_name)
|
|
227
|
+
web_page.wait_for_timeout(5000)
|
|
228
|
+
continue
|
|
229
|
+
|
|
191
230
|
if 'crashed' in str(e) or 'Target' in str(e):
|
|
192
231
|
log("检测到页面或目标崩溃,直接退出当前循环", self.store_username, self.store_name)
|
|
193
232
|
raise e
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|