qrpa 1.0.40__tar.gz → 1.0.42__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.40 → qrpa-1.0.42}/PKG-INFO +1 -1
- {qrpa-1.0.40 → qrpa-1.0.42}/pyproject.toml +1 -1
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/fun_web.py +3 -6
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/shein_excel.py +94 -92
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa.egg-info/PKG-INFO +1 -1
- {qrpa-1.0.40 → qrpa-1.0.42}/README.md +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/RateLimitedSender.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/__init__.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/db_migrator.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/feishu_bot_app.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/feishu_client.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/feishu_logic.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/fun_base.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/fun_excel.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/fun_file.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/fun_win.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/shein_daily_report_model.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/shein_lib.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/shein_sqlite.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/shein_ziniao.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/temu_chrome.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/temu_excel.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/temu_lib.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/time_utils.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/time_utils_example.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa/wxwork.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa.egg-info/SOURCES.txt +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa.egg-info/dependency_links.txt +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/qrpa.egg-info/top_level.txt +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/setup.cfg +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/setup.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/tests/test_db_migrator.py +0 -0
- {qrpa-1.0.40 → qrpa-1.0.42}/tests/test_wxwork.py +0 -0
|
@@ -5,7 +5,6 @@ from playwright.sync_api import Page
|
|
|
5
5
|
from .fun_base import log, send_exception
|
|
6
6
|
from .time_utils import get_current_datetime
|
|
7
7
|
|
|
8
|
-
|
|
9
8
|
def fetch(page: Page, url: str, params: Optional[Union[dict, list, str]] = None, headers: Optional[dict] = None, config:
|
|
10
9
|
Optional[dict] = None) -> dict:
|
|
11
10
|
"""
|
|
@@ -23,6 +22,7 @@ Optional[dict] = None) -> dict:
|
|
|
23
22
|
raise ValueError("headers 参数必须是 dict 或 None")
|
|
24
23
|
|
|
25
24
|
try:
|
|
25
|
+
page.wait_for_load_state('load')
|
|
26
26
|
response = page.evaluate("""
|
|
27
27
|
async ({ url, params, extraHeaders }) => {
|
|
28
28
|
try {
|
|
@@ -64,7 +64,6 @@ Optional[dict] = None) -> dict:
|
|
|
64
64
|
raise send_exception()
|
|
65
65
|
# return {"error": "fetch error", "message": str(e)}
|
|
66
66
|
|
|
67
|
-
|
|
68
67
|
def fetch_via_iframe(page: Page, target_domain: str, url: str, params: Optional[Union[dict, list, str]] = None, config:
|
|
69
68
|
Optional[dict] = None) -> dict:
|
|
70
69
|
"""
|
|
@@ -126,9 +125,8 @@ Optional[dict] = None) -> dict:
|
|
|
126
125
|
|
|
127
126
|
return response
|
|
128
127
|
except Exception as e:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
raise send_exception()
|
|
129
|
+
# return {"error": "iframe_exception", "message": str(e)}
|
|
132
130
|
|
|
133
131
|
# 找到一个页面里面所有的iframe
|
|
134
132
|
def find_all_iframe(page: Page):
|
|
@@ -137,7 +135,6 @@ def find_all_iframe(page: Page):
|
|
|
137
135
|
log("找到 iframe:", frame.url)
|
|
138
136
|
return [frame.url for frame in frames]
|
|
139
137
|
|
|
140
|
-
|
|
141
138
|
# 全屏幕截图
|
|
142
139
|
def full_screen_shot(web_page: Page, config):
|
|
143
140
|
# 设置页面的视口大小为一个较大的值,确保截图高清
|
|
@@ -60,52 +60,53 @@ class SheinExcel:
|
|
|
60
60
|
else:
|
|
61
61
|
urls = '\n'.join(item['rejectPicUrlList'])
|
|
62
62
|
|
|
63
|
-
for
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
63
|
+
for box_list in return_detail:
|
|
64
|
+
for package_list in box_list['boxList']:
|
|
65
|
+
package_name = package_list['packageName']
|
|
66
|
+
package_no = package_list['returnBoxNo']
|
|
67
|
+
for skc_item in package_list['goods']:
|
|
68
|
+
skc_img = skc_item['imgPath']
|
|
69
|
+
skc = skc_item['skc']
|
|
70
|
+
supplierCode = skc_item['supplierCode']
|
|
71
|
+
for sku_item in skc_item['details']:
|
|
72
|
+
platformSku = sku_item['platformSku']
|
|
73
|
+
supplierSku = sku_item['supplierSku']
|
|
74
|
+
suffixZh = sku_item['suffixZh']
|
|
75
|
+
returnQuantity = sku_item['returnQuantity']
|
|
76
|
+
|
|
77
|
+
store_info = f'{store_username}\n{store_name}\n处理类型: {returnOrderTypeName}\n退货状态: {returnOrderStatusName}'
|
|
78
|
+
skc_info = f'SKC: {skc}\n供方货号: {supplierCode}\n预计退货数量/执行退货数量: {waitReturnQuantity}/{skcReturnQuantity}\n预计退货货值: {returnAmount} {currencyCode}'
|
|
79
|
+
|
|
80
|
+
row_item = []
|
|
81
|
+
row_item.append(returnOrderNo)
|
|
82
|
+
row_item.append(completeTime)
|
|
83
|
+
row_item.append(isSign)
|
|
84
|
+
row_item.append(store_info)
|
|
85
|
+
row_item.append(self.config.shein_store_manager.get(str(store_username).lower()))
|
|
86
|
+
row_item.append(returnReasonTypeName)
|
|
87
|
+
row_item.append(returnReason)
|
|
88
|
+
row_item.append(skc_img)
|
|
89
|
+
row_item.append(skc_info)
|
|
90
|
+
row_item.append(supplierSku)
|
|
91
|
+
row_item.append(suffixZh)
|
|
92
|
+
row_item.append(returnQuantity)
|
|
93
|
+
row_item.append(platformSku)
|
|
94
|
+
row_item.append(self.bridge.get_sku_supplier(supplierSku, erp))
|
|
95
|
+
row_item.append(self.bridge.get_sku_cost(supplierSku, erp))
|
|
96
|
+
row_item.append(package_name)
|
|
97
|
+
row_item.append(package_no)
|
|
98
|
+
row_item.append(returnPlanNo)
|
|
99
|
+
row_item.append(sellerOrderNo)
|
|
100
|
+
row_item.append(sellerDeliveryNo)
|
|
101
|
+
row_item.append(returnWayTypeName)
|
|
102
|
+
row_item.append(returnExpressCompanyName)
|
|
103
|
+
row_item.append(expressNoList)
|
|
104
|
+
row_item.append(returnAddress)
|
|
105
|
+
row_item.append(sellerContract)
|
|
106
|
+
row_item.append(sellerContractPhone)
|
|
107
|
+
row_item.append(urls)
|
|
108
|
+
|
|
109
|
+
excel_data.append(row_item)
|
|
109
110
|
|
|
110
111
|
cache_file_excel = f'{self.config.auto_dir}/shein/cache/shein_return_order_list_excel_{start_date}_{end_date}.json'
|
|
111
112
|
write_dict_to_file(cache_file_excel, excel_data)
|
|
@@ -149,52 +150,53 @@ class SheinExcel:
|
|
|
149
150
|
else:
|
|
150
151
|
urls = '\n'.join(item['rejectPicUrlList'])
|
|
151
152
|
|
|
152
|
-
for
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
153
|
+
for box_list in return_detail:
|
|
154
|
+
for package_list in box_list['boxList']:
|
|
155
|
+
package_name = package_list['packageName']
|
|
156
|
+
package_no = package_list['returnBoxNo']
|
|
157
|
+
for skc_item in package_list['goods']:
|
|
158
|
+
skc_img = skc_item['imgPath']
|
|
159
|
+
skc = skc_item['skc']
|
|
160
|
+
supplierCode = skc_item['supplierCode']
|
|
161
|
+
for sku_item in skc_item['details']:
|
|
162
|
+
platformSku = sku_item['platformSku']
|
|
163
|
+
supplierSku = sku_item['supplierSku']
|
|
164
|
+
suffixZh = sku_item['suffixZh']
|
|
165
|
+
returnQuantity = sku_item['returnQuantity']
|
|
166
|
+
|
|
167
|
+
store_info = f'{store_username}\n{store_name}\n处理类型: {returnOrderTypeName}\n退货状态: {returnOrderStatusName}'
|
|
168
|
+
skc_info = f'SKC: {skc}\n供方货号: {supplierCode}\n预计退货数量/执行退货数量: {waitReturnQuantity}/{skcReturnQuantity}\n预计退货货值: {returnAmount} {currencyCode}'
|
|
169
|
+
|
|
170
|
+
row_item = []
|
|
171
|
+
row_item.append(returnOrderNo)
|
|
172
|
+
row_item.append(completeTime)
|
|
173
|
+
row_item.append(isSign)
|
|
174
|
+
row_item.append(store_info)
|
|
175
|
+
row_item.append(self.config.shein_store_manager.get(str(store_username).lower()))
|
|
176
|
+
row_item.append(returnReasonTypeName)
|
|
177
|
+
row_item.append(returnReason)
|
|
178
|
+
row_item.append(skc_img)
|
|
179
|
+
row_item.append(skc_info)
|
|
180
|
+
row_item.append(supplierSku)
|
|
181
|
+
row_item.append(suffixZh)
|
|
182
|
+
row_item.append(returnQuantity)
|
|
183
|
+
row_item.append(platformSku)
|
|
184
|
+
row_item.append(self.bridge.get_sku_supplier(supplierSku, erp))
|
|
185
|
+
row_item.append(self.bridge.get_sku_cost(supplierSku, erp))
|
|
186
|
+
row_item.append(package_name)
|
|
187
|
+
row_item.append(package_no)
|
|
188
|
+
row_item.append(returnPlanNo)
|
|
189
|
+
row_item.append(sellerOrderNo)
|
|
190
|
+
row_item.append(sellerDeliveryNo)
|
|
191
|
+
row_item.append(returnWayTypeName)
|
|
192
|
+
row_item.append(returnExpressCompanyName)
|
|
193
|
+
row_item.append(expressNoList)
|
|
194
|
+
row_item.append(returnAddress)
|
|
195
|
+
row_item.append(sellerContract)
|
|
196
|
+
row_item.append(sellerContractPhone)
|
|
197
|
+
row_item.append(urls)
|
|
198
|
+
|
|
199
|
+
excel_data.append(row_item)
|
|
198
200
|
|
|
199
201
|
sheet_name = '昨日退货列表'
|
|
200
202
|
|
|
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
|