fix: 稳定采购地址页面切换 (#221)

This commit is contained in:
chengma
2026-08-14 10:26:45 +08:00
parent c0ed12d776
commit 84ec0ed1f0
2 changed files with 34 additions and 2 deletions
+16
View File
@@ -69,6 +69,7 @@ _RISK_MARKERS = ("操作频繁", "异常请求", "风险提示", "账号异常")
_PAYMENT_MARKERS = ("输入支付密码", "立即支付", "支付成功", "支付失败")
_FINAL_SUBMIT_MARKERS = ("提交订单", "现在买,仅", "确认购买")
_OUT_OF_STOCK_MARKERS = ("已售罄", "暂时缺货", "库存不足", "该商品已售罄")
_ADDRESS_ACTION_SETTLE_SECONDS = 1.0
_SUPPORTED_OPTION_KEYS = frozenset({"color", "size"})
_MAX_QUANTITY_BUTTON_CLICKS = 5
_KEYBOARD_STATUS_MARKERS = (
@@ -1378,6 +1379,7 @@ class U2PddLivePurchaseAdapter(U2PddPurchaseAdapter, PddLivePurchaseAdapter):
"PURCHASE_ADDRESS_ENTRY_AMBIGUOUS",
"规格面板没有唯一可靠的收货地址入口",
)
self._settle_after_address_action()
panel_root = self._wait_for_address_page("panel")
edit_root = self._open_address_edit_page(panel_root)
@@ -1410,12 +1412,14 @@ class U2PddLivePurchaseAdapter(U2PddPurchaseAdapter, PddLivePurchaseAdapter):
step="purchase_update_shipping_address",
)
editor.set_text(new_address)
self._settle_after_address_action()
save_target = self._wait_for_stable_address_save(new_address)
self._click_unique_address_target(
[save_target],
"PURCHASE_ADDRESS_SAVE_AMBIGUOUS",
"修改页没有唯一可靠的保存按钮",
)
self._settle_after_address_action()
saved_root, saved_page = self._wait_after_address_save(new_address)
if saved_page == "confirmation":
@@ -1426,6 +1430,7 @@ class U2PddLivePurchaseAdapter(U2PddPurchaseAdapter, PddLivePurchaseAdapter):
"PURCHASE_ADDRESS_BACK_AMBIGUOUS",
"收货地址页没有唯一可靠的返回按钮",
)
self._settle_after_address_action()
self._wait_for_address_page("confirmation")
except PddPurchaseError:
raise
@@ -1451,6 +1456,11 @@ class U2PddLivePurchaseAdapter(U2PddPurchaseAdapter, PddLivePurchaseAdapter):
(left + right) // 2, (top + bottom) // 2
)
def _settle_after_address_action(self) -> None:
"""关键地址操作后留出固定时间,再继续按页面状态确认。"""
self._sleep(_ADDRESS_ACTION_SETTLE_SECONDS)
def _open_address_edit_page(self, panel_root: ET.Element) -> ET.Element:
"""稳定识别“修改”按钮;首次点击丢失时最多安全重试一次。"""
@@ -1501,6 +1511,9 @@ class U2PddLivePurchaseAdapter(U2PddPurchaseAdapter, PddLivePurchaseAdapter):
"PURCHASE_ADDRESS_EDIT_AMBIGUOUS",
"收货地址页没有唯一可靠的修改按钮",
)
self._settle_after_address_action()
# 固定稳定等待不能占用原页面切换超时预算。
deadline += _ADDRESS_ACTION_SETTLE_SECONDS
click_attempts += 1
if first_clicked_target is None:
first_clicked_target = current_target
@@ -1693,6 +1706,9 @@ class U2PddLivePurchaseAdapter(U2PddPurchaseAdapter, PddLivePurchaseAdapter):
if overlay_stable_reads >= 3 and system_back_attempts == 0:
# 只关闭已知系统浮层;保存按钮和 PDD 页面都不重试点击。
self._require_device().press("back")
self._settle_after_address_action()
# 固定稳定等待不能占用原浮层关闭确认超时预算。
deadline += _ADDRESS_ACTION_SETTLE_SECONDS
system_back_attempts = 1
overlay_stable_reads = 0
self._sleep(0.2)