qrpa 1.0.85__tar.gz → 1.0.87__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.

Files changed (37) hide show
  1. {qrpa-1.0.85 → qrpa-1.0.87}/PKG-INFO +1 -1
  2. {qrpa-1.0.85 → qrpa-1.0.87}/pyproject.toml +1 -1
  3. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/shein_lib.py +45 -12
  4. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/shein_ziniao.py +1 -1
  5. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa.egg-info/PKG-INFO +1 -1
  6. {qrpa-1.0.85 → qrpa-1.0.87}/README.md +0 -0
  7. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/RateLimitedSender.py +0 -0
  8. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/__init__.py +0 -0
  9. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/db_migrator.py +0 -0
  10. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/feishu_bot_app.py +0 -0
  11. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/feishu_client.py +0 -0
  12. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/feishu_logic.py +0 -0
  13. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/fun_base.py +0 -0
  14. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/fun_excel.py +0 -0
  15. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/fun_file.py +0 -0
  16. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/fun_web.py +0 -0
  17. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/fun_win.py +0 -0
  18. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/mysql_module/__init__.py +0 -0
  19. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/mysql_module/shein_product_model.py +0 -0
  20. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/mysql_module/shein_return_order_model.py +0 -0
  21. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/shein_daily_report_model.py +0 -0
  22. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/shein_excel.py +0 -0
  23. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/shein_mysql.py +0 -0
  24. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/shein_sqlite.py +0 -0
  25. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/temu_chrome.py +0 -0
  26. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/temu_excel.py +0 -0
  27. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/temu_lib.py +0 -0
  28. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/time_utils.py +0 -0
  29. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/time_utils_example.py +0 -0
  30. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa/wxwork.py +0 -0
  31. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa.egg-info/SOURCES.txt +0 -0
  32. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa.egg-info/dependency_links.txt +0 -0
  33. {qrpa-1.0.85 → qrpa-1.0.87}/qrpa.egg-info/top_level.txt +0 -0
  34. {qrpa-1.0.85 → qrpa-1.0.87}/setup.cfg +0 -0
  35. {qrpa-1.0.85 → qrpa-1.0.87}/setup.py +0 -0
  36. {qrpa-1.0.85 → qrpa-1.0.87}/tests/test_db_migrator.py +0 -0
  37. {qrpa-1.0.85 → qrpa-1.0.87}/tests/test_wxwork.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qrpa
3
- Version: 1.0.85
3
+ Version: 1.0.87
4
4
  Summary: qsir's rpa library
5
5
  Author: QSir
6
6
  Author-email: QSir <1171725650@qq.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "qrpa"
7
- version = "1.0.85"
7
+ version = "1.0.87"
8
8
  description = "qsir's rpa library"
9
9
  authors = [{ name = "QSir", email = "1171725650@qq.com" }]
10
10
  readme = "README.md"
@@ -31,6 +31,20 @@ class SheinLib:
31
31
  def deal_auth(self):
32
32
  web_page = self.web_page
33
33
 
34
+ # 等待页面稳定并收集诊断信息
35
+ try:
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)
41
+ try:
42
+ log(f"页面状态检查 - 标题: {web_page.title()}, URL: {web_page.url}", self.store_username, self.store_name)
43
+ except Exception as check_error:
44
+ log(f"页面状态检查失败: {check_error}", self.store_username, self.store_name)
45
+
46
+ web_page.wait_for_timeout(3000)
47
+
34
48
  # 定义最大重试次数
35
49
  MAX_RETRIES = 5
36
50
  retries = 0
@@ -45,6 +59,13 @@ class SheinLib:
45
59
  retries += 1
46
60
 
47
61
  while not web_page.locator('//div[contains(text(),"商家后台")]').nth(1).is_visible():
62
+
63
+ try:
64
+ current_url = web_page.url
65
+ current_title = web_page.title()
66
+ log(f"循环检查 - URL: {current_url}, 标题: {current_title}", self.store_username, self.store_name)
67
+ except Exception as status_error:
68
+ log(f"获取页面状态失败: {status_error}", self.store_username, self.store_name)
48
69
 
49
70
  if web_page.locator('xpath=//div[@id="container" and @alita-name="gmpsso"]//button[@type="button" and @id]').nth(0).is_visible():
50
71
  if 'https://sso.geiwohuo.com/#/home' not in web_page.url:
@@ -145,19 +166,31 @@ class SheinLib:
145
166
  except Exception as e:
146
167
  log(f"错误发生: {e}, 重试中...({self.store_username}, {self.store_name})")
147
168
  log(traceback.format_exc())
148
- if 'crashed' in str(e):
169
+
170
+ # 收集崩溃时的详细信息
171
+ try:
172
+ crash_url = web_page.url
173
+ crash_title = web_page.title()
174
+ log(f"崩溃时页面信息 - URL: {crash_url}, 标题: {crash_title}", self.store_username, self.store_name)
175
+
176
+ # 尝试截图保存崩溃现场
149
177
  try:
150
- if 'https://sso.geiwohuo.com//#/auth/SSLS' in web_page.url:
151
- log("检测到页面崩溃,尝试恢复到首页", self.store_username, self.store_name)
152
- web_page.wait_for_load_state("networkidle", timeout=5000)
153
- web_page.goto('https://sso.geiwohuo.com/#/home', wait_until='domcontentloaded', timeout=10000)
154
- else:
155
- log("页面崩溃,尝试重新加载当前页面", self.store_username, self.store_name)
156
- web_page.reload(wait_until='domcontentloaded', timeout=10000)
157
- web_page.wait_for_timeout(3000)
158
- except Exception as recovery_error:
159
- log(f"页面恢复失败: {recovery_error}", self.store_username, self.store_name)
160
- web_page.wait_for_timeout(5000)
178
+ screenshot_path = f"crash_screenshot_{self.store_username}_{int(time.time())}.png"
179
+ web_page.screenshot(path=screenshot_path)
180
+ log(f"已保存崩溃截图: {screenshot_path}", self.store_username, self.store_name)
181
+ except:
182
+ log("无法截取崩溃时的页面截图", self.store_username, self.store_name)
183
+
184
+ except:
185
+ log("无法获取崩溃时的页面信息", self.store_username, self.store_name)
186
+
187
+ # 检查是否是内存相关崩溃
188
+ if any(keyword in str(e).lower() for keyword in ['memory', 'out of memory', 'oom']):
189
+ log("检测到内存相关崩溃", self.store_username, self.store_name)
190
+
191
+ if 'crashed' in str(e) or 'Target' in str(e):
192
+ log("检测到页面或目标崩溃,直接退出当前循环", self.store_username, self.store_name)
193
+ raise e
161
194
  retries += 1
162
195
  if retries >= MAX_RETRIES:
163
196
  log(f"达到最大重试次数,停止尝试({self.store_username}, {self.store_name})")
@@ -258,7 +258,7 @@ class ZiniaoBrowser:
258
258
  """打开启动页面并执行业务逻辑"""
259
259
  page = browser_context.pages[0]
260
260
  page.goto(launcher_page)
261
- page.wait_for_timeout(6000)
261
+ page.wait_for_timeout(3000)
262
262
 
263
263
  run_func(page, store_username, store_name, task_key)
264
264
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qrpa
3
- Version: 1.0.85
3
+ Version: 1.0.87
4
4
  Summary: qsir's rpa library
5
5
  Author: QSir
6
6
  Author-email: QSir <1171725650@qq.com>
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