
    j                     t    d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	  G d d      Z
defdZdefd	Zdd
Zy)ua  按站点管理独立持久浏览器（launch_persistent_context）。
- 每站点一个 user_data_dir：收货邮编/币种偏好/会话跨轮次保留，设一次长期有效
- ensure_location(): 验证 glow 邮编，失效才重设。
  实测结论（diag3）：Enter/按钮提交后 glow 不自动刷新，必须 reload 页面才显示新位置。
    N)sync_playwrightBrowserContext)SITE_CONFIGSUAc                   2    e Zd ZdZd Zd ZdedefdZd Z	y)	SiteBrowsersuZ   一次巡检_round的生命周期内持有；按需惰性启动，结束时统一关闭。c                      d | _         i | _        y N)_pw	_contextsselfs    /home/user/monitor/browser.py__init__zSiteBrowsers.__init__   s        c                 l    | j                   t               j                         | _         | j                   S r
   )r   r   startr   s    r   	_start_pwzSiteBrowsers._start_pw   s(    88&(..0DHxxr   sitereturnc           
         |t         vrt        d|       || j                  vrt         |   }t        j                  |d   d       | j                         j                  j                  |d   dt        |d   |d   ddd	d
dg      }|j                  d|d   |d   ddg       || j                  |<   | j                  |   S )Nu   未知站点 profile_dirT)exist_oklocaletimezoneiV  i   )widthheightz--no-sandboxz--disable-dev-shm-usage)headless
user_agentr   timezone_idviewportargsz
i18n-prefscurrencydomain/)namevaluer$   path)
r   KeyErrorr   osmakedirsr   chromiumlaunch_persistent_contextr   add_cookies)r   r   cfgctxs       r   getzSiteBrowsers.get   s    |#]4&122t~~%t$CKKM*T:.."++EEM"8}
O#'37$&?@ F C OOlS_(+HsD E F#&DNN4 ~~d##r   c                 .   | j                   j                         D ]  }|j                           | j                   j	                          | j
                  r"| j
                  j                          d | _        y y # t        $ r Y iw xY w# t        $ r Y #w xY wr
   )r   valuesclose	Exceptionclearr   stop)r   r0   s     r   r4   zSiteBrowsers.close+   sv    >>((* 	#C	# 	88DH  "d" "d"s#   A9B 9	BB	BBN)
__name__
__module____qualname____doc__r   r   strr   r1   r4    r   r   r   r      s'    d
$ $ $(r   r   r   c                     	 | j                  d      j                  }|j                         r/dj                  |j	                  d      j                               S dS # t        $ r Y yw xY w)N!#nav-global-location-popover-link i  timeout )locatorfirstcountjoin
inner_textsplitr5   )pageels     r   	glow_textrL   6   s_    \\=>DD@B
sxxd399;<RPRR s   AA A 	A*)A*c                 ~    t        j                  ddt        |    d         }|t        j                  dd|xs d      v S )Nz\DrC   postcode)resubr   )r   glowdigitss      r   location_okrS   =   s:    VVE2|D1*=>FRVVE2tzr222r   c                    fd}t         |   }t        |       }t        ||      r |d| d|        d|fS t        d|dz         D ]r  }	  |d| d| d       | j	                  dd	
       | j                  ddd	       t        j                  d       | j                  d|d          | j                  dd       t        j                  d       	 | j                  d      }|j                         rC|j                  j                         r)|j                  j	                  dd        |d| d       t        j                  d        |d| d       | j                  dd       t        j                  d       t        |       }t        ||      r |d| d|        d|fc S  |d| d|        u d t        |       fS # t        $ r Y w xY w# t        $ rZ}	 |d| d| dt!        |	      j"                          | j$                  j                  d       n# t        $ r Y nw xY wY d}	~	d}	~	ww xY w)!ut   打开商品页后调用：验证邮编，未生效则重设（Enter 提交 → 按钮兜底 → reload 验证）。c                      r	t        |   y y r
   )print)alogs    r   Pzensure_location.<locals>.PC   s    q	3r   [u   ] 邮编已生效(免设): T   u   ] 邮编尝试u   : 打开弹窗r?   i@  rA   z#GLUXZipUpdateInputvisible)staterB   rN   Enter   z#GLUXZipUpdatei  )rB   forceu   ] 追加按钮点击   u   ] reload 验证domcontentloadediȯ  )
wait_untilrB   u   ] 邮编生效: u   ] 未生效: u   ] 尝试u   异常: EscapeNF)r   rL   rS   rangeclickwait_for_selectortimesleepfillpressrD   rF   rE   
is_visibler5   reloadtyper8   keyboard)
rJ   r   	max_retryrX   rY   r/   gattemptbtnes
      `      r   ensure_locationru   A   s(   
t
C$A4	AdV.qc
23QwIM* #	#$~gYn=>JJ:DJI""#8	SW"XJJqMII+S_=JJ,g6JJqMll#3499;399#7#7#9IIOODO=$345 JJqM$'(KK#5uKEJJqM$A4#AdV+A3/0Qw$}QC()1#: )D/!!    	#$xya1A1A0BCD$$X."d"	#si   BGA$G9A1G-G	GGGG	H=#$H8H#"H8#	H/,H8.H//H88H=)r_   N)r;   rO   rh   r*   playwright.sync_apir   r   sitesr   r   r   r<   rL   boolrS   ru   r=   r   r   <module>ry      s@   
  	 ? "' 'Ts 3t 3&"r   