Files
xhs_crawler_claude/app/__pycache__/auth_manager.cpython-311.pyc
T

64 lines
12 KiB
Plaintext
Raw Normal View History

2026-01-12 18:58:23 +08:00
§
2026-01-12 19:07:00 +08:00
gÔdiÍãó—dZddlmZddlZddlZddlmZddlmZmZddl m
2026-01-12 18:58:23 +08:00
Z
m Z ddl m
Z
mZmZddlmZej ejd ¦«ZeGd
„d ¦«¦«Zd!d„Zd"d„Zd#d„Zd$d„Zd%d„Zd&d'd„Zd(d„Zd)d „ZdS)*u¤auth_manager.py
登录�管�(�账�)
- 使用 Playwright storage_state �存到 data/auth_state.json
- �外�存元数�到 data/auth_meta.json(登录时间/最�验�时间等)
- �供 verify_login / get_login_status 等方法
设计目标:
1) ��赖“文件存在�判断登录,而是用 Playwright 打开页��轻�验�
2) �账�长期�用:���掉线,就一直用
2026-01-12 19:07:00 +08:00
é)Ú annotationsN)Ú dataclass)ÚdatetimeÚ timedelta)ÚOptionalÚTuple)ÚBrowserÚBrowserContextÚ TimeoutError)Úconfigzauth_meta.jsoncóD—eZdZUded<dZded<dZded<dZded<dS)Ú LoginStatusÚboolÚ logged_inNz
2026-01-12 18:58:23 +08:00
Optional[str]Ú
login_timeÚlast_verified_timeÚmessage)Ú__name__Ú
__module__Ú __qualname__Ú__annotations__rrr©óú$/tmp/tmpdw5zp1n_/app/auth_manager.pyrrsO€€€€€€à€O€O�OØ $€JÐ$Ð$Ð$Ñ$Ø(,ÐÐ,Ð,Ð,Ñ,Ø!€GÐ!Ð!Ð!Ñ!Ð!Ð!rrÚreturnÚstrcóP—tj¦« d¬¦«S)NÚseconds)Útimespec)rÚnowÚ isoformatrrrÚ_utc_isor"&s€å Œ<‰>Œ>× #Ò #¨YÐ #Ñ 7Ô 7Ð7rÚdictcó—tj t¦«siS t tdd¬¦«5}t j|¦«picddd¦«S#1swxYwYdS#t$ricYSwxYw)NÚrúutf-8©Úencoding)ÚosÚpathÚexistsÚAUTH_META_FILEÚopenÚjsonÚloadÚ Exception)Úfs rÚload_auth_metar2+sÌ€Ý
Œ7�>Š>�.Ñ )Ô )ðØˆ ðÝ
•. #°Ð
8Ñ
8Ô
8ð &¸AÝ”9˜Q‘<”<Ð% 2ð &ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &øå ðððØˆ ˆ ˆ ðøøøs4¨A/¿A"Á A/Á"A&Á&A/Á)A&Á*A/Á/ A>Á=A>ÚmetaÚNonecóÒ—tdz}t|dd¬¦«5}tj||dd¬¦«ddd¦«n #1swxYwYt j|t¦«dS)Nz.tmpÚwr&r'Fé)Ú ensure_asciiÚindent)r,r-r.Údumpr)Úreplace)r3Útmpr1s rÚsave_auth_metar=5s¤€Ý
˜6Ñ
!€CÝ
ˆc�3 Ð )Ñ )Ô )ð9¨QÝ Œ �$˜¨°aÐ8Ñ8Ô8Ð8ð9ð9ð9ñ9ô9ð9ð9ð9ð9ð9ð9øøøð9ð9ð9ð9å„Jˆs•NÑ#Ô#Ð#Ð#Ð#s�AÁAÁ AÚbrowserr r
cƒóØK—tj tj¦«r&| tj¬¦«ƒd{V—†S| ¦«ƒd{V—†S)u2基于已ä¿�存的 storage_state 创建 context。)Ú
storage_stateN)r)r*r+r ÚAUTH_STATE_FILEÚ new_context)r>s rÚ _new_contextrC<spèè€å „w‡~‚~•fÔ,Ñ-Ô-ðOØ×(Ò(µvÔ7MÐ(ÑNÔNÐNÐNÐNÐNÐNÐNÐNØ×$Ò$Ñ&Ô&Ð &Ð &Ð &Ð &Ð &Ð &Ð&rcƒó¶K—t|¦«ƒd{V—†}| ¦«ƒd{V—†}| tjd¬¦«ƒd{V—†dS)uM打开登录页é�¢ï¼ˆé€šå¸¸éœ€è¦�用户在 VNC/有界é�¢çŽ¯å¢ƒé‡Œæ‰«ç �)。NÚdomcontentloaded)Ú
wait_until)rCÚnew_pageÚgotor Ú LOGIN_URL)r>ÚcontextÚpages rÚopen_login_pagerLCszèè€å  Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)€GØ×!Ò!Ñ#Ô#Ð #Ð #Ð #Ð #Ð #Ð #€DØ
�)Š)•FÔ$Ð1Cˆ)Ñ
DÔ
DÐDÐDÐDÐDÐDÐDÐDÐDÐDréÚ timeout_secÚintúTuple[bool, str]cƒóÜK—tj tj¦«sdSt |¦«ƒd{V—†}| ¦«ƒd{V—†} | tjdzd|dz¬¦«ƒd{V—†|  d¦«ƒd{V—†|j
pd}d |vr[ |  ¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†d
S#t$rYd
SwxYw| 
d ¦« ¦«ƒd{V—†}|d krˆ| ¦«ƒd{V—†}t!|¦«d
kr[ |  ¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†dS#t$rYdSwxYw| ¦«ƒd{V—†}t!|¦«d
kr[ |  ¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†dS#t$rYdSwxYwt#¦«}| d¦«st'¦«|d<t'¦«|d<t)|¦« | tj¬¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†dS#t$rYdSwxYw#t,$r\Y |  ¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†dS#t$rYdSwxYwt$rh}dd|›�fcYd}~ |  ¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†S#t$rYSwxYwd}~wwxYw# |  ¦«ƒd{V—†n#t$rYnwxYw |  ¦«ƒd{V—†w#t$rYwwxYwxYw)uJ验è¯�当å‰� storage_state 是å�¦ä»�然有效。
策略(尽�稳,���赖�个易� selector):
1) 打开首页;
2) 若跳转到 /login 或出现明显登录按钮/文案,则判定未登录;
3) 若未跳登录页,并且存在一定数� cookie,则判定登录有效(���)。
)Fu'未找到登录æ€�文件,请先登录Nú/rEiè)rFÚtimeouti Úz/login)Fu3已跳转到登录页(登录æ€�å�¯èƒ½å·²å¤±æ•ˆï¼‰u text=登录ré)Fu>检测到登录入å�£ä¸” cookie æ•°é‡�过少,疑似未登录)Fu%cookie æ•°é‡�过少,疑似未登录rr)r*)TÚok)Fu9验è¯�登录超时(网络或风控),请ç¨�å�Žé‡�试Fu验è¯�登录异常: )r)r*r+r rArCrGrHÚXIAOHONGSHU_BASE_URLÚwait_for_timeoutÚurlÚcloser0ÚlocatorÚcountÚcookiesÚlenr2Úgetr"r=r@ÚPlaywrightTimeoutError) r>rNrJrKrYÚlogin_text_hitsr]r3Úes rÚ verify_loginrcLs�èè€õ Œ7�>Š>�&Ô0Ñ 1Ô 1ð@Ø?Ð?å  Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)€GØ×!Ò!Ñ#Ô#Ð #Ð #Ð #Ð #Ð #Ð #€Dð/Ø�iŠi�Ô3°cÑ9ÐFXÐbmÐptÑbtˆiÑuÔuÐuÐuÐuÐuÐuÐuÐuØ×#Ò# CÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(àŒhˆn˜"ˆØ �sˆ?ˆ?ØOðD Ø—*’*‘,”,Ð Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø ˆDð øøøð Ø—-’-‘/”/Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDˆDð øøøðK!%§ ¢ ¨]Ñ ;Ô ;× AÒ AÑ CÔ CÐCÐCÐCÐCÐCÐCˆØ ˜QÒ Ð à#ŸOšOÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-ˆGÝ�7‰|Œ|˜aÒÐØ^ð4 Ø—*’*‘,”,Ð Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø ˆDð øøøð Ø—-’-‘/”/Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDˆDð øøøð= ŸšÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)ˆÝ ˆw‰<Œ<˜!Ò Ð ØAð, Ø—*’*‘,”,Ð Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø ˆDð øøøð Ø—-’-‘/”/Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDˆDð øøøõ3ÑÔˆØ�xŠx˜ Ñ%Ô%ð ,Ý!)¡¤ˆD�Ñ Ý%-¡Z¤ZˆÐ
!Ñ"Ý�tÑÔÐð Ø×'Ò'­VÔ-CÐ'ÑDÔDÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DøÝð ð ð à ˆDð øøøðð  Ø—*’*‘,”,Ð Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø ˆDð øøøð Ø—-’-‘/”/Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDˆDð øøøøõ "ðRðRðRØQð Ø—*’*‘,”,Ð Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø ˆDð øøøð Ø—-’-‘/”/Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDˆDð øøøõ ð1ð1ð1ØÐ0¨QÐ0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ð Ø—*’*‘,”,Ð Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø ˆDð øøøð Ø—-’-‘/”/Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDð øøøøøøøð1øøøøð Ø—*’*‘,”,Ð Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø ˆDð øøøð Ø—-’-‘/”/Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDð øøøøøøs•ÁAL9Â6CÃ
CÃCÃ"C>Ã>
D Ä D ÄA L9Å1F Æ
FÆFÆF9Æ9
GÇGÇ
-L9Ç9HÈ
H!È H!È%IÉ
IÉIÉAL9Ê'&KË
L9Ë
KËL9ËKËL9Ë K;Ë;
LÌLÌ L(Ì(
L6Ì5L6Ì9
PÍPÍM Í
M-Í,M-Í1N
Î
NÎNÎ PÎ'P
Î-PÎ.PÎ3OÏ
OÏOÏO:Ï: