python-qdairlines-helper 0.0.6__py3-none-any.whl → 0.2.6__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.
- {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/METADATA +2 -1
- python_qdairlines_helper-0.2.6.dist-info/RECORD +35 -0
- qdairlines_helper/config/url_const.py +2 -1
- qdairlines_helper/controller/add_passenger.py +29 -26
- qdairlines_helper/controller/book_payment.py +73 -41
- qdairlines_helper/controller/book_search.py +105 -52
- qdairlines_helper/controller/cash_pax_info.py +11 -8
- qdairlines_helper/controller/home.py +4 -3
- qdairlines_helper/controller/nhlms_cashdesk.py +32 -18
- qdairlines_helper/controller/order_detail.py +43 -34
- qdairlines_helper/controller/order_query.py +9 -6
- qdairlines_helper/controller/order_verify.py +9 -4
- qdairlines_helper/controller/pay_success.py +66 -0
- qdairlines_helper/controller/user_login.py +14 -9
- qdairlines_helper/po/add_passenger_page.py +3 -2
- qdairlines_helper/po/book_search_page.py +46 -28
- qdairlines_helper/po/cash_pax_info_page.py +10 -10
- qdairlines_helper/po/nhlms_cash_desk_page.py +2 -1
- qdairlines_helper/po/order_verify_page.py +0 -2
- qdairlines_helper/po/pay_success_page.py +33 -0
- qdairlines_helper/utils/exception_utils.py +91 -3
- python_qdairlines_helper-0.0.6.dist-info/RECORD +0 -34
- qdairlines_helper/utils/log_utils.py +0 -14
- {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/WHEEL +0 -0
- {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/licenses/LICENSE +0 -0
- {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/top_level.txt +0 -0
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
from typing import Optional
|
|
13
13
|
from playwright.async_api import Page, Locator
|
|
14
14
|
from playwright_helper.libs.base_po import BasePo
|
|
15
|
-
from qdairlines_helper.utils.log_utils import logger
|
|
16
15
|
import qdairlines_helper.config.url_const as url_const
|
|
17
16
|
from playwright.async_api import Error as PlaywrightError, TimeoutError as PlaywrightTimeoutError
|
|
18
17
|
|
|
@@ -40,7 +39,6 @@ class OrderVerifyPage(BasePo):
|
|
|
40
39
|
return await self.get_locator(selector=selector, timeout=timeout)
|
|
41
40
|
except (PlaywrightError, PlaywrightTimeoutError, EnvironmentError, RuntimeError, Exception) as e:
|
|
42
41
|
attempt += 1
|
|
43
|
-
logger.error(f"订单校验页面,第<{attempt}>次尝试刷新加载订单数据失败,原因:{e}")
|
|
44
42
|
raise RuntimeError("订单校验页面中的订单信息加载出现异常,可能是网络拥塞或者用户被风控")
|
|
45
43
|
|
|
46
44
|
async def get_agree_checkbox(self, timeout: float = 5.0) -> Locator:
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# ---------------------------------------------------------------------------------------------------------
|
|
4
|
+
# ProjectName: python-qdairlines-helper
|
|
5
|
+
# FileName: pay_success_page.py
|
|
6
|
+
# Description: 支付成功页面对象
|
|
7
|
+
# Author: ASUS
|
|
8
|
+
# CreateDate: 2026/01/09
|
|
9
|
+
# Copyright ©2011-2026. Hunan xxxxxxx Company limited. All rights reserved.
|
|
10
|
+
# ---------------------------------------------------------------------------------------------------------
|
|
11
|
+
"""
|
|
12
|
+
from typing import Optional
|
|
13
|
+
from playwright.async_api import Page, Locator
|
|
14
|
+
from playwright_helper.libs.base_po import BasePo
|
|
15
|
+
import qdairlines_helper.config.url_const as url_const
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class PaySuccessPage(BasePo):
|
|
19
|
+
url: str = url_const.pay_success_url
|
|
20
|
+
__page: Page
|
|
21
|
+
|
|
22
|
+
def __init__(self, page: Page, url: Optional[str] = None) -> None:
|
|
23
|
+
super().__init__(page, url or url_const.pay_success_url)
|
|
24
|
+
self.__page = page
|
|
25
|
+
|
|
26
|
+
async def get_pay_success_image(self, timeout: float = 5.0) -> Locator:
|
|
27
|
+
"""
|
|
28
|
+
获取支付成功image图标
|
|
29
|
+
:param timeout: 超时时间(秒)
|
|
30
|
+
:return: (是否存在, 错误信息|元素对象)
|
|
31
|
+
"""
|
|
32
|
+
selector: str = '//img[@alt="支付成功"]'
|
|
33
|
+
return await self.get_locator(selector=selector, timeout=timeout)
|
|
@@ -9,9 +9,97 @@
|
|
|
9
9
|
# Copyright ©2011-2026. Hunan xxxxxxx Company limited. All rights reserved.
|
|
10
10
|
# ---------------------------------------------------------------------------------------------------------
|
|
11
11
|
"""
|
|
12
|
+
from typing import Literal
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class DuplicatePaymentError(Exception):
|
|
15
|
-
def __init__(self,
|
|
16
|
-
self.
|
|
17
|
-
super().__init__(f"订单<{
|
|
16
|
+
def __init__(self, order_no: str):
|
|
17
|
+
self.order_no = order_no
|
|
18
|
+
super().__init__(f"订单<{order_no}>重复支付")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class NotEnoughTicketsError(Exception):
|
|
22
|
+
def __init__(self, flight_no: str, seats_status: int, passengers: int):
|
|
23
|
+
self.flight_no = flight_no
|
|
24
|
+
self.seats_status = seats_status
|
|
25
|
+
self.passengers = passengers
|
|
26
|
+
super().__init__(f"青岛航空官网显示航班<{flight_no}>的余票<{seats_status}>少于乘客人数<{passengers}>")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ExcessiveProfitdError(Exception):
|
|
30
|
+
def __init__(
|
|
31
|
+
self, flight_no: str, query_price: float, order_price: float, reduction_threshold: float,
|
|
32
|
+
asset: Literal["票面价", "销售价"] = "票面价"
|
|
33
|
+
):
|
|
34
|
+
self.flight_no = flight_no
|
|
35
|
+
self.query_price = query_price
|
|
36
|
+
self.order_price = order_price
|
|
37
|
+
self.reduction_threshold = reduction_threshold
|
|
38
|
+
self.asset = asset
|
|
39
|
+
super().__init__(
|
|
40
|
+
f"航班<{flight_no}>官网价:{query_price} 低于:订单{asset}[{order_price}] - 下降阈值[{reduction_threshold}],收益过高"
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ExcessiveLossesError(Exception):
|
|
45
|
+
def __init__(
|
|
46
|
+
self, flight_no: str, query_price: float, order_price: float, increase_threshold: float,
|
|
47
|
+
asset: Literal["票面价", "销售价"] = "票面价"
|
|
48
|
+
):
|
|
49
|
+
self.flight_no = flight_no
|
|
50
|
+
self.query_price = query_price
|
|
51
|
+
self.order_price = order_price
|
|
52
|
+
self.increase_threshold = increase_threshold
|
|
53
|
+
self.asset = asset
|
|
54
|
+
super().__init__(
|
|
55
|
+
f"航班<{flight_no}>官网价:{query_price} 高于:订单{asset}[{order_price}] + 上浮阈值[{increase_threshold}],亏损太多"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class PaymentChannelError(Exception):
|
|
60
|
+
def __init__(self, channel_name: str):
|
|
61
|
+
self.channel_name = channel_name
|
|
62
|
+
super().__init__(f"支付渠道<{channel_name}>暂不支持")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class PaymentChannelMissError(Exception):
|
|
66
|
+
def __init__(self):
|
|
67
|
+
super().__init__(f"支付渠道参数丢失")
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class PaymentTypeError(Exception):
|
|
71
|
+
def __init__(self, payment_type: str):
|
|
72
|
+
self.payment_type = payment_type
|
|
73
|
+
super().__init__(f"付款方式<{payment_type}>暂不支持")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class PassengerTypeError(Exception):
|
|
77
|
+
def __init__(self, passenger_type: str):
|
|
78
|
+
self.passenger_type = passenger_type
|
|
79
|
+
super().__init__(f"乘客类型<{passenger_type}>暂不支持")
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class ProductTypeError(Exception):
|
|
83
|
+
def __init__(self, product_type: str):
|
|
84
|
+
self.product_type = product_type
|
|
85
|
+
super().__init__(f"产品类型<{product_type}>暂不支持")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class HFPaymentTypeError(Exception):
|
|
89
|
+
def __init__(self, payment_type: str):
|
|
90
|
+
self.payment_type = payment_type
|
|
91
|
+
super().__init__(f"汇付天下的付款方式<{payment_type}>暂不支持")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class PaymentFailedError(Exception):
|
|
95
|
+
def __init__(self, pre_order_no: str, order_status: str):
|
|
96
|
+
self.pre_order_no = pre_order_no
|
|
97
|
+
self.order_status = order_status
|
|
98
|
+
super().__init__(f"青岛航空官网订单<{pre_order_no}>支付失败,支付结束后的状态<{order_status}>")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class IPBlockError(Exception):
|
|
102
|
+
|
|
103
|
+
def __init__(self, message: str):
|
|
104
|
+
self.message = message
|
|
105
|
+
super().__init__(message)
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
python_qdairlines_helper-0.0.6.dist-info/licenses/LICENSE,sha256=WtjCEwlcVzkh1ziO35P2qfVEkLjr87Flro7xlHz3CEY,11556
|
|
2
|
-
qdairlines_helper/__init__.py,sha256=bN1FqEK_jvefO_HU_8HFJpjuOzHTsuhmRe5KAzmraR4,479
|
|
3
|
-
qdairlines_helper/config/__init__.py,sha256=JjIRocePx3gwFNpdauuiwBU6B2Ug565xaHLEMu5Oo0I,479
|
|
4
|
-
qdairlines_helper/config/url_const.py,sha256=nN-n7s4lYuUHUVcTN09CVIdg57ObPQUsR6Wx_O85R_A,2064
|
|
5
|
-
qdairlines_helper/controller/__init__.py,sha256=oyeciEBlDLNpqHblB0R-nXQG3HsI8L5mmlWulQ7Y38Q,482
|
|
6
|
-
qdairlines_helper/controller/add_passenger.py,sha256=aAwYu2g3xfDudsA0k1XPIYTp7nS9aRAqiJyFmjG4c_U,4838
|
|
7
|
-
qdairlines_helper/controller/book_payment.py,sha256=SQdO_aCdYx6Ymtt4qKdR9cRVd_ExJ4dfsKLpZbamvIA,4820
|
|
8
|
-
qdairlines_helper/controller/book_search.py,sha256=hnOUaFyyIkVuOxK46PLg38dBYBx67G8prRphL8J4Iy0,6043
|
|
9
|
-
qdairlines_helper/controller/cash_pax_info.py,sha256=1UvN27Iw5Jho-MUhdhdIsqlBqBpZFXYGk3VcbvEq5Xg,2422
|
|
10
|
-
qdairlines_helper/controller/home.py,sha256=YsVY8IO9TAv2DKbDya18HeT8j4EbaOBVrFg-cOfXziE,1342
|
|
11
|
-
qdairlines_helper/controller/nhlms_cashdesk.py,sha256=9hu-goJa1aeQItNZM9irE-9Lg50c6L8eKN9teUxm54A,3686
|
|
12
|
-
qdairlines_helper/controller/order_detail.py,sha256=dGsFo2hB7T8cFVtMDX7CxDtPokCAwL8EhkffnZ23k_o,2775
|
|
13
|
-
qdairlines_helper/controller/order_query.py,sha256=qXZd-o6XpAOf19BrOxl02Xd-lHsaRRyW3RzmzQDqk6I,1794
|
|
14
|
-
qdairlines_helper/controller/order_verify.py,sha256=pNKt2pypAJ-ZZoJryyLPtTh7_8WeAmHz-EJR3pDsv0c,2181
|
|
15
|
-
qdairlines_helper/controller/user_login.py,sha256=JtcRkIz7-4ZD5Bo2POmHxoVaSRMGQzNjoOAdU684LXE,4576
|
|
16
|
-
qdairlines_helper/http/__init__.py,sha256=96AJPf2zgw_rm3Wv-boIBltWFgZH3Yo-fn5M9SRK280,489
|
|
17
|
-
qdairlines_helper/http/flight_order.py,sha256=tC25YNk1pDzMmk4Zy6v120PwNuuaDhlHFh5xPBxtKco,3665
|
|
18
|
-
qdairlines_helper/po/__init__.py,sha256=HoouLJGLu_dI6IAKTVjBRraGHMcAUgntayTph-BUBAE,481
|
|
19
|
-
qdairlines_helper/po/add_passenger_page.py,sha256=kylElFfCYDgzHYS4Pwh7jnK0cUZPAYxffNkJqb5ak9M,7956
|
|
20
|
-
qdairlines_helper/po/air_order_page.py,sha256=0Ux0B2hUGKCoFLRpJqGHS2w690o0A2PDnvRf9-UKfJE,930
|
|
21
|
-
qdairlines_helper/po/book_search_page.py,sha256=XBMu9_1F1eCIvrgAACsAOUVmi4MC16gYkY9qD62iux4,9881
|
|
22
|
-
qdairlines_helper/po/cash_pax_info_page.py,sha256=PwVFosIcoGVerx-2DFlC0ZvY7XuXL6bFjOwZ3fOFjd4,3473
|
|
23
|
-
qdairlines_helper/po/home_page.py,sha256=KvoOZOYwKjlJjZOT522K_8ic3_2zaYOPWkuklUHVSlM,907
|
|
24
|
-
qdairlines_helper/po/login_page.py,sha256=SdWmkP_47GeosbFRcfvXLeQxxdM7b9UESvmajWq4-nA,2975
|
|
25
|
-
qdairlines_helper/po/nhlms_cash_desk_page.py,sha256=nh7X7Jzygm_JhY0gECZtTKdZ4j5ey8gv5RIr6jtjdWQ,4510
|
|
26
|
-
qdairlines_helper/po/order_verify_page.py,sha256=rdXn34SM6GGt-if7KLx9x6fYG-iPFOJINIklhqIi9hk,3095
|
|
27
|
-
qdairlines_helper/utils/__init__.py,sha256=sti2S709puM2mQbQisk0KGq_YNjW6T4zz2vyYXonNB0,479
|
|
28
|
-
qdairlines_helper/utils/exception_utils.py,sha256=LutPeb-RZ58qYTfwwvaF0GtVAE-cpDtCoQZWSyGilhQ,681
|
|
29
|
-
qdairlines_helper/utils/log_utils.py,sha256=QLu4fcwaO__4c_ZA6zwy-7LnygX9Ds2PSrr9nEWcrvA,542
|
|
30
|
-
qdairlines_helper/utils/po_utils.py,sha256=74ZVyyxPmPk1tcGQoMauXhBE3qsZJej8urni1ch27io,2417
|
|
31
|
-
python_qdairlines_helper-0.0.6.dist-info/METADATA,sha256=LRkNzxGCpIbwkk3GLX1oSxbrQA9AB-ANtmDnyMlpbf0,14387
|
|
32
|
-
python_qdairlines_helper-0.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
33
|
-
python_qdairlines_helper-0.0.6.dist-info/top_level.txt,sha256=MRbQkBMdSG4f5mx2RWfu6aXoDSyM-2KwL-YFqNBdbng,18
|
|
34
|
-
python_qdairlines_helper-0.0.6.dist-info/RECORD,,
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
# ---------------------------------------------------------------------------------------------------------
|
|
4
|
-
# ProjectName: python-qdairlines-helper
|
|
5
|
-
# FileName: log_utils.py
|
|
6
|
-
# Description: 日志模块
|
|
7
|
-
# Author: ASUS
|
|
8
|
-
# CreateDate: 2026/01/04
|
|
9
|
-
# Copyright ©2011-2026. Hunan xxxxxxx Company limited. All rights reserved.
|
|
10
|
-
# ---------------------------------------------------------------------------------------------------------
|
|
11
|
-
"""
|
|
12
|
-
from logging import getLogger
|
|
13
|
-
|
|
14
|
-
logger = getLogger("root")
|
|
File without changes
|
|
File without changes
|
{python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/top_level.txt
RENAMED
|
File without changes
|