
    G_ir                     $   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZmZ d dlmZmZ e j<                  j?                  d      r e j@                  d        ejB                  dejD                  ddd        ejF                         Z$e$jK                  ejD                          ejL                  d      jO                  e$       e j<                  jQ                  e j<                  jS                  e*            Z+e j<                  jY                  e+d      Z- ee-        e j\                  d      Z/ e j\                  d      Z0 e j\                  d      Z1dZ2d Z3d Z4d Z5ddZ6y)    N)load_dotenv)BeautifulSoup)	webdriver)Service)By)Keys)ChromeDriverManager)WebDriverWait)expected_conditions)TimeoutExceptionUnexpectedAlertPresentExceptionNoAlertPresentException)
REGION_MAP	CAT_CODESzcrawler.logz'%(asctime)s [%(levelname)s] %(message)sz%H:%M:%Sutf-8)filenamelevelformatdatefmtencoding z.envUSER_IDUSER_PWTARGET_LOGIN_URLz4https://www.my-auction.co.kr/auction/search_list.phpc                     t        j                         } | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       d	| _        t        j                  t        t               j                               | 
      }|j                  d       |S )Nz
--headlessz--no-sandboxz--disable-dev-shm-usagez--disable-gpuz--window-size=1280,720z--disable-extensionsz--dns-prefetch-disablez'--disable-features=VizDisplayCompositorz/usr/bin/google-chrome-stable)serviceoptions   )	r   ChromeOptionsadd_argumentbinary_locationChromer   r	   installset_page_load_timeout)r   drivers     $/var/www/html/land_sniper/crawler.py
get_driverr'   /   s    %%'G&(23)12 /012BC=G+-5578F   $M    c                 R   	 t        | d      j                  t        j                                | j                  j
                  }|j                  }t        j                  d|        |j                          t        j                  d       |S # t        $ r Y yt        $ r Y yw xY w)u5   혹시 떠있을지 모르는 경고창(Alert) 처리   u#   🚨 [경고창 감지됨] 내용: u5   👉 경고창 '확인'을 눌러서 닫았습니다.N)r
   untilECalert_is_present	switch_toalerttextloggingwarningacceptinfor   r   )r%   r/   
alert_texts      r&   handle_alertr6   H   s    fa &&r':':'<=  &&ZZ
=j\JKLM " s   BB 	B&B&%B&c                    	 t        j                  d       | j                  t               t	        j
                  d       | j                  d       t        j                  d       t        j                  d       	 t        | d      j                  t        j                  t        j                  df            }| j                  t        j                  d      }|j'                          |j)                  t*               |j'                          |j)                  t,               t        j                  d       |j)                  t.        j0                         t	        j
                  d       t3        |       }|rt        j                  d|        y| j4                  }t        j                  d|        d|v rnt        j                  d       | j                  d       t!        ddd      5 }|j#                  | j$                         ddd       t        j                  d       yt        j                  d       y# t        $ rW t        j                  d	       t!        d
dd      5 }|j#                  | j$                         ddd       Y y# 1 sw Y   Y yxY ww xY w# 1 sw Y   xY w# t6        $ rI}t        j                  d|        t        j                  t9        j:                                Y d}~yd}~ww xY w)u&   로그인 수행 (과학수사 모드)u-   🔑 [1] 로그인 페이지 접속 시도...   zdebug_1_login_page.pngu9   📸 접속 화면 저장 완료 (debug_1_login_page.png)u)   ⌨️ [2] 아이디/비번 입력 중...
   idpasswduA   ❌ 입력창을 찾을 수 없습니다! (ID='id' 요소 없음)zdebug_error_source.htmlwr   )r   NFu+   🚀 [3] 로그인 정보 전송 (Enter)...u,   ❌ 로그인 실패 (사이트 메시지): u   📍 현재 URL: z	login.phpuD   ⚠️ URL이 여전히 로그인 페이지입니다. 실패 의심!zdebug_2_login_failed.pngzdebug_failed_source.htmluQ   📄 현재 페이지 소스를 'debug_failed_source.html'로 저장했습니다.u2   ✅ 로그인 성공! (페이지 이동 확인됨)Tu!   ❌ 로그인 중 에러 발생: )r1   r4   get	LOGIN_URLtimesleepsave_screenshotr
   r+   r,   presence_of_element_locatedr   IDfind_elementr   erroropenwritepage_sourceclear	send_keysMY_IDMY_PWr   RETURNr6   current_url	Exception	traceback
format_exc)r%   id_inputpw_inputf	alert_msgrN   es          r&   loginrW   X   sX   =DE

9 	

1 	78PQ 	@A		$VR066..t}=H **255(;H 	5!5! 	BC4;;' 	

1 (	MMHTU (((67+%MM`a""#=> 0#H ,A**+,LLlmLLMNK   	MM]^/wG ,1**+,,		>, ,  9!=>i**,-s   A:J/ =AI  B8J/ AJ/ 0J#J/ *J/  ,J ,JJ J/ J	J J/ J  J/ #J,(J/ /	L8?K<<Lc           	      .   t               }g }	 t        j                  d|  d| d| d       t        |      s7t        j                  d       |j                          g |j                          S t        |    d   }t        |    d   j                  |d      }t        j                  |d	      }t         d
| d| d| }	t        j                  d|	        |j                  |	       t        j                  d       t        |j                  d      }
|
j                  d      }|s|
j                  d      }t        j                  dt        |              d}|D ]  }||k\  r n|j                   j#                         }d|v r)	 |j%                  d      }|s>|j                   j#                         }|d   }t        |      dk  rl|j'                  d      sd|z   }|j)                  ||dj+                  |j-                               d d |dd       |dz  }t        j                  d|         |j                          |S # t.        $ r Y w xY w# t.        $ r"}t        j                  d|        Y d }~Gd }~ww xY w# |j                          w xY w) Nu   🤖 크롤러 시작 (지역:  u
   , 물건: )uQ   🚫 로그인 실패로 종료합니다. (로그 및 스크린샷 확인 필요)codesub_regionsr   101z?address1_01=z&address1_02=z&usage_code=u   🌐 검색 페이지 접속: r*   zhtml.parserz&form[name='fboardlist'] table tbody trtru!   📦 발견된 리스트 개수: r   u	   대항력za[href*='search_view.php']href   httpzhttps://www.my-auction.co.krd   u   진행)
auction_idtitle	info_textlinkstatus   u    - 수집: u   ❌ 전체 에러: )r'   r1   r4   rW   rE   quitr   r=   r   BASE_SEARCH_URLr?   r@   r   rH   selectlenr0   strip
select_one
startswithappendjoinsplitrO   )	sido_name
gugun_namecat_namelimitr%   results	sido_code
gugun_codecat_code
target_urlsoupitemscountitemr0   link_taga_idr_   rV   s                      r&   run_instant_searchr      sv   \FG=6yk:,jYaXbbcdeV}MMmnKKMn 	i y)&1		*=9==j"M
==51'(i[j\Yefneop
5j\BC

:

1V//? DEKK%E8UEF 	D~u99??$Dd"H??+GH}}**,'t9q=(v.7UX\7\"&!!$$**,!7!= &   
{4&121	@ 	N    1+A3/001 	sn   AI /DI II -II A*I1I 	II II 	I?I:5J :I??J J)r9   )7osr?   r1   rP   dotenvr   bs4r   seleniumr   !selenium.webdriver.chrome.servicer   selenium.webdriver.common.byr   selenium.webdriver.common.keysr   webdriver_manager.chromer	   selenium.webdriver.support.uir
   selenium.webdriver.supportr   r,   selenium.common.exceptionsr   r   r   mappingsr   r   pathexistsremovebasicConfigINFOStreamHandlerconsolesetLevel	getLogger
addHandlerdirnameabspath__file__current_folderrq   env_pathgetenvrK   rL   r>   rj   r'   r6   rW   r    r(   r&   <module>r      sB   	       5 + / 8 7 @ q q + 77>>- BIIm   
,,4  '


!       "      ) !:;77<</ H 		)		)BII()	H2 ?BCr(   