diff --git "a/Crawling/F/[DSL]Session_3_Crawling_\352\263\274\354\240\234_\352\271\200\355\225\234\353\271\210.ipynb" "b/Crawling/F/[DSL]Session_3_Crawling_\352\263\274\354\240\234_\352\271\200\355\225\234\353\271\210.ipynb"
new file mode 100644
index 0000000..3d2c789
--- /dev/null
+++ "b/Crawling/F/[DSL]Session_3_Crawling_\352\263\274\354\240\234_\352\271\200\355\225\234\353\271\210.ipynb"
@@ -0,0 +1,682 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#크롬드라이버 경로 설정\n",
+ "import sys\n",
+ "sys.path.insert(0, '/usr/lib/chromium-browser/chromedriver')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\rlagk\\anaconda3\\lib\\site-packages\\requests\\__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (3.0.4) doesn't match a supported version!\n",
+ " warnings.warn(\"urllib3 ({}) or chardet ({}) doesn't match a supported \"\n"
+ ]
+ }
+ ],
+ "source": [
+ "#정보요청 라이브러리 import\n",
+ "import requests\n",
+ "\n",
+ "#크롤링 라이브러리 import|\n",
+ "from bs4 import BeautifulSoup "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 기본과제(필수) : \n",
+ "\n",
+ "사람인의 채용정보 페이지에서 추천 지역의 아래의 회사명, 제목을 40개 뽑아 데이터프레임으로 생성하세요. (beautifulsoup 활용)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "200"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#사람인에 정보요청\n",
+ "saramin = requests.get(\"https://www.saramin.co.kr/zf_user/\")\n",
+ "\n",
+ "# 사람인 응답코드 확인\n",
+ "saramin.status_code"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#User-Agent 지정\n",
+ "headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#크롤링 할 대상 url 지정\n",
+ "url = 'https://www.saramin.co.kr/zf_user/jobs/list/domestic'\n",
+ "\n",
+ "#크롤링 대상 url과 headers를 기반으로 정보 요청\n",
+ "res = requests.get(url, headers = headers)\n",
+ "\n",
+ "#정상적으로 정보를 받은 경우 지속, 그렇지 않은 경우 중지\n",
+ "res.raise_for_status()\n",
+ "\n",
+ "#html문서를 beautifulsoup의 lxml 형태로 변환\n",
+ "soup = BeautifulSoup(res.text, 'lxml') "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 추천지역 섹션을 find해서 list_body로 할당 \n",
+ "list_body = soup.find('div', attrs = {'class' : 'list_body'})\n",
+ "\n",
+ "# listbody 중 회사명 정보가 있는 col company_nm부분을 company_nm에 할당 \n",
+ "company_nm = list_body.findAll('div', attrs = {'class' : 'col company_nm'})\n",
+ "\n",
+ "# listbody 중 제목정보가 있는 col notification_info부분을 company_info에 할당 \n",
+ "company_info = list_body.findAll('div', attrs = {'class' : 'col notification_info'})"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 기업명 정보 corp_list를 생성 \n",
+ "corp_list = []\n",
+ "\n",
+ "# 제목에 해당하는 title데이터를 for문으로 corp_list에 추가해줌\n",
+ "for i in company_nm:\n",
+ " corp = i.a['title']\n",
+ " corp_list.append(corp)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 제목 정보 info_list를 생성 \n",
+ "info_list = []\n",
+ "\n",
+ "# 제목에 해당하는 title데이터를 for문으로 info_list에 추가해줌\n",
+ "for i in company_info:\n",
+ " info = i.a['title']\n",
+ " info_list.append(info)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 기업명 | \n",
+ " 제목 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " (주)튜링 | \n",
+ " 빠르게 성장 중인 스타트업 [경영지원 매니저] | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " (주)미창 | \n",
+ " 2022년 상반기 신입·경력직 채용공고(영업/연구/AS직) | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 케이에스엠(주) | \n",
+ " [경력/학력 무관] 생산부 직원 채용 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 엠엠엠인터내셔널(주) | \n",
+ " KAGE 영재교육원 송도원 사고력/인문/수학/과학 교사 모집 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " (주)아시안스타 | \n",
+ " 인사총무 담당자(경력) 채용 (사원~대리) | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 주식회사 카델 | \n",
+ " 컨텐츠 매니저 경력무관 채용(정규직) | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 주)앤돌핀 | \n",
+ " 디지털마케팅 AE 모집합니다. | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " (주)에이아이스페라 | \n",
+ " [경력] 마케팅팀(해외 영어) 채용 공고 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 선린테크(주) | \n",
+ " 기업부설연구소 회로파트 정규직 채용 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 피씨엔오티(주) | \n",
+ " Java, 머신비전 개발 Setup/PLC제어/ 전장설계,배선 채용 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 티알 | \n",
+ " 웹디자이너 (포토샵 능숙자) + html /css 가능 (경력우대) | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " 제이피스(주) | \n",
+ " [주5일/망포] 삼성전자 VOC 담당자 채용 | \n",
+ "
\n",
+ " \n",
+ " | 12 | \n",
+ " (주)제이앤와이스타일 | \n",
+ " [쇼핑몰] 분홍코끼리 웹디자인팀 경력사원 채용(성수동 근무) | \n",
+ "
\n",
+ " \n",
+ " | 13 | \n",
+ " 웨비지(주) | \n",
+ " 사이트 제작 영업 신입 및 경력 사원을 모집합니다 | \n",
+ "
\n",
+ " \n",
+ " | 14 | \n",
+ " (주)키스템프 | \n",
+ " [역삼/영어]나이키 자회사 외국계 패션기업 마케팅팀(VMD) 채용 | \n",
+ "
\n",
+ " \n",
+ " | 15 | \n",
+ " (주) EVC PLAZA | \n",
+ " 전기차 충전시설 구축관련 행정사무 및 공정사무원을 모집 | \n",
+ "
\n",
+ " \n",
+ " | 16 | \n",
+ " (주)드림파트너스 | \n",
+ " [암호화폐/업계수익률1위] 드림파트너스 영업 신입/경력 채용 | \n",
+ "
\n",
+ " \n",
+ " | 17 | \n",
+ " 정함한의원 | \n",
+ " 한의원 치료실 선생님 (연봉2,600~ / 주5일 선택휴무 압구정 | \n",
+ "
\n",
+ " \n",
+ " | 18 | \n",
+ " (주)레시펫 | \n",
+ " 반려견 자연식 사료 생산팀(장) 채용 모집 | \n",
+ "
\n",
+ " \n",
+ " | 19 | \n",
+ " (주)에프앤피 | \n",
+ " [이케아 동부산점/환경좋음] 배송품포장 및 배차/CS 직원모집 | \n",
+ "
\n",
+ " \n",
+ " | 20 | \n",
+ " 주식회사 금강대부중개 | \n",
+ " 2022 상반기 대출상담/인바운드/대출상담사外 경력직 채용 공고 | \n",
+ "
\n",
+ " \n",
+ " | 21 | \n",
+ " 스탭스 (주) | \n",
+ " 애니텍 기계설계 업무 정규직 채용 | \n",
+ "
\n",
+ " \n",
+ " | 22 | \n",
+ " (주)키스템프 | \n",
+ " [별내역] 유명건설 社 현장사무직 채용 | \n",
+ "
\n",
+ " \n",
+ " | 23 | \n",
+ " (주)바이오액츠 (BioActs) | \n",
+ " 바이오사업부 직원 모집 (바이오 시약개발 / 유기합성 / 인허가) | \n",
+ "
\n",
+ " \n",
+ " | 24 | \n",
+ " (주)백향목교육 | \n",
+ " 미사소마 사고력수학 전임(주5일) 구인 | \n",
+ "
\n",
+ " \n",
+ " | 25 | \n",
+ " (주)애피 | \n",
+ " 제네시스부티크 UI/UX 역량을 갖춘 웹퍼블리셔 공고 | \n",
+ "
\n",
+ " \n",
+ " | 26 | \n",
+ " (주)포인트모바일 | \n",
+ " S/W 사업본부 각 부문 신입/경력 채용 | \n",
+ "
\n",
+ " \n",
+ " | 27 | \n",
+ " (주)맨파워그룹코리아 | \n",
+ " [시청역/복지우수] 한국화웨이 본사 중한통번역사 & Team Assist | \n",
+ "
\n",
+ " \n",
+ " | 28 | \n",
+ " 유정산업 | \n",
+ " [ PCB ] 신규 구미 사업장 3조 2교대 사원 모집 | \n",
+ "
\n",
+ " \n",
+ " | 29 | \n",
+ " (주)스칼라데이터 | \n",
+ " 프론트엔드(React Native) APP 개발자 모집 | \n",
+ "
\n",
+ " \n",
+ " | 30 | \n",
+ " (주)파인솔루션대부 | \n",
+ " 대출심사 신입 및 경력 채용(부동산 담보대출) | \n",
+ "
\n",
+ " \n",
+ " | 31 | \n",
+ " (주)헬로우미스터리 | \n",
+ " [셀프미] 재고관리/CS관리/오픈마켓 외 정규직 채용(경력무관) | \n",
+ "
\n",
+ " \n",
+ " | 32 | \n",
+ " (주)키스템프 | \n",
+ " [포천/정규직전환] 유명기업 사무직 채용(신입가능/연령무관) | \n",
+ "
\n",
+ " \n",
+ " | 33 | \n",
+ " (주)위드엘씨 | \n",
+ " 기업부설연구소 연구원 모집 | \n",
+ "
\n",
+ " \n",
+ " | 34 | \n",
+ " (주)디젠트 | \n",
+ " 2022년 상반기 전략영업팀 경력직 모집 공고 | \n",
+ "
\n",
+ " \n",
+ " | 35 | \n",
+ " (주)윈큐브마케팅 | \n",
+ " (주)윈큐브마케팅 자사몰 운영자 모집 (신입/경력) | \n",
+ "
\n",
+ " \n",
+ " | 36 | \n",
+ " (주)시영산업 | \n",
+ " 현대車 1차밴드 사내협력사 CNC가공 모집 | \n",
+ "
\n",
+ " \n",
+ " | 37 | \n",
+ " 퍼시픽워터 | \n",
+ " 기계 엔지니어 경력 및 신입 채용 - 정규직 | \n",
+ "
\n",
+ " \n",
+ " | 38 | \n",
+ " 마스터콘라인(주) | \n",
+ " [신입] 콘솔/포워딩 수입 업무팀 | \n",
+ "
\n",
+ " \n",
+ " | 39 | \n",
+ " 시에스타스포츠 | \n",
+ " 구미김천칠곡왜관 대구 어린이스포츠유아체육/유아축구 교사모집 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 기업명 제목\n",
+ "0 (주)튜링 빠르게 성장 중인 스타트업 [경영지원 매니저]\n",
+ "1 (주)미창 2022년 상반기 신입·경력직 채용공고(영업/연구/AS직)\n",
+ "2 케이에스엠(주) [경력/학력 무관] 생산부 직원 채용\n",
+ "3 엠엠엠인터내셔널(주) KAGE 영재교육원 송도원 사고력/인문/수학/과학 교사 모집\n",
+ "4 (주)아시안스타 인사총무 담당자(경력) 채용 (사원~대리)\n",
+ "5 주식회사 카델 컨텐츠 매니저 경력무관 채용(정규직)\n",
+ "6 주)앤돌핀 디지털마케팅 AE 모집합니다.\n",
+ "7 (주)에이아이스페라 [경력] 마케팅팀(해외 영어) 채용 공고\n",
+ "8 선린테크(주) 기업부설연구소 회로파트 정규직 채용\n",
+ "9 피씨엔오티(주) Java, 머신비전 개발 Setup/PLC제어/ 전장설계,배선 채용\n",
+ "10 티알 웹디자이너 (포토샵 능숙자) + html /css 가능 (경력우대)\n",
+ "11 제이피스(주) [주5일/망포] 삼성전자 VOC 담당자 채용\n",
+ "12 (주)제이앤와이스타일 [쇼핑몰] 분홍코끼리 웹디자인팀 경력사원 채용(성수동 근무)\n",
+ "13 웨비지(주) 사이트 제작 영업 신입 및 경력 사원을 모집합니다\n",
+ "14 (주)키스템프 [역삼/영어]나이키 자회사 외국계 패션기업 마케팅팀(VMD) 채용\n",
+ "15 (주) EVC PLAZA 전기차 충전시설 구축관련 행정사무 및 공정사무원을 모집\n",
+ "16 (주)드림파트너스 [암호화폐/업계수익률1위] 드림파트너스 영업 신입/경력 채용\n",
+ "17 정함한의원 한의원 치료실 선생님 (연봉2,600~ / 주5일 선택휴무 압구정\n",
+ "18 (주)레시펫 반려견 자연식 사료 생산팀(장) 채용 모집\n",
+ "19 (주)에프앤피 [이케아 동부산점/환경좋음] 배송품포장 및 배차/CS 직원모집\n",
+ "20 주식회사 금강대부중개 2022 상반기 대출상담/인바운드/대출상담사外 경력직 채용 공고\n",
+ "21 스탭스 (주) 애니텍 기계설계 업무 정규직 채용\n",
+ "22 (주)키스템프 [별내역] 유명건설 社 현장사무직 채용\n",
+ "23 (주)바이오액츠 (BioActs) 바이오사업부 직원 모집 (바이오 시약개발 / 유기합성 / 인허가)\n",
+ "24 (주)백향목교육 미사소마 사고력수학 전임(주5일) 구인\n",
+ "25 (주)애피 제네시스부티크 UI/UX 역량을 갖춘 웹퍼블리셔 공고\n",
+ "26 (주)포인트모바일 S/W 사업본부 각 부문 신입/경력 채용\n",
+ "27 (주)맨파워그룹코리아 [시청역/복지우수] 한국화웨이 본사 중한통번역사 & Team Assist\n",
+ "28 유정산업 [ PCB ] 신규 구미 사업장 3조 2교대 사원 모집\n",
+ "29 (주)스칼라데이터 프론트엔드(React Native) APP 개발자 모집\n",
+ "30 (주)파인솔루션대부 대출심사 신입 및 경력 채용(부동산 담보대출)\n",
+ "31 (주)헬로우미스터리 [셀프미] 재고관리/CS관리/오픈마켓 외 정규직 채용(경력무관)\n",
+ "32 (주)키스템프 [포천/정규직전환] 유명기업 사무직 채용(신입가능/연령무관)\n",
+ "33 (주)위드엘씨 기업부설연구소 연구원 모집\n",
+ "34 (주)디젠트 2022년 상반기 전략영업팀 경력직 모집 공고\n",
+ "35 (주)윈큐브마케팅 (주)윈큐브마케팅 자사몰 운영자 모집 (신입/경력)\n",
+ "36 (주)시영산업 현대車 1차밴드 사내협력사 CNC가공 모집\n",
+ "37 퍼시픽워터 기계 엔지니어 경력 및 신입 채용 - 정규직\n",
+ "38 마스터콘라인(주) [신입] 콘솔/포워딩 수입 업무팀\n",
+ "39 시에스타스포츠 구미김천칠곡왜관 대구 어린이스포츠유아체육/유아축구 교사모집"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# pandas 로드\n",
+ "import pandas as pd\n",
+ "\n",
+ "# df에 기업명, 제목 데이터를 40개씩 뽑아 추가하여 데이터프레임으로 생성\n",
+ "df = pd.DataFrame({'기업명' : corp_list[:40], \n",
+ " '제목': info_list[:40]})\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 심화과제(선택) : \n",
+ "커리어연세의 취업정보 - 채용공고에 올라오는 회사명, 제목을 40개 뽑아 데이터프레임으로 생성하세요. (selenium 활용)\n",
+ "\n",
+ "단, 커리어연세 과제 제출 시 코드 실행 후 자신의 아이디, 비밀번호 작성한 notebook cell은 삭제해서 제출해주세요."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#셀레늄 라이브러리 불러오기\n",
+ "from selenium import webdriver\n",
+ "\n",
+ "#셀레늄에서 html문서가 생성될 때까지 대기하는 함수 불러오기\n",
+ "from selenium.webdriver.support.ui import WebDriverWait\n",
+ "\n",
+ "#셀레늄에서 조건을 걸어줄 수 있는 함수 불러오기\n",
+ "from selenium.webdriver.support import expected_conditions as EC\n",
+ "from selenium.webdriver.common.by import By\n",
+ "\n",
+ "\n",
+ "#키보드 자판을 입력할 수 있는 셀레늄 함수 불러오기\n",
+ "from selenium.webdriver.common.keys import Keys\n",
+ "\n",
+ "#시간에 따른 컨트롤이 가능한 라이브러리 불러오기\n",
+ "import time\n",
+ "\n",
+ "#크롬드라이버 경로 설정\n",
+ "import sys\n",
+ "sys.path.insert(0, '/usr/lib/chromium-browser/chromedriver')\n",
+ "\n",
+ "from selenium import webdriver\n",
+ "options = webdriver.ChromeOptions()\n",
+ "options.add_argument('-headless')\n",
+ "options.add_argument('-no-sandbox')\n",
+ "options.add_argument('-disable-dev-shm-usage')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":2: DeprecationWarning: executable_path has been deprecated, please pass in a Service object\n",
+ " browser = webdriver.Chrome(executable_path = 'C:/chromedriver_win32/chromedriver.exe')\n"
+ ]
+ }
+ ],
+ "source": [
+ "#드라이버 객체 생성\n",
+ "browser = webdriver.Chrome(executable_path = 'C:/chromedriver_win32/chromedriver.exe')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#커리어 연세 사이트로 접속\n",
+ "browser.get('https://career.yonsei.ac.kr/')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "usr = \"2017123206\"\n",
+ "pwd = \"sk@qmwisk97'\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":2: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
+ " browser.find_element_by_xpath('/html/body/div/div/div[2]/div/ul/li[1]/a').click()\n",
+ ":6: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
+ " browser.find_element_by_xpath('//*[@id=\"loginId\"]').send_keys(usr)\n",
+ ":10: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
+ " browser.find_element_by_xpath('//*[@id=\"loginPasswd\"]').send_keys(pwd)\n"
+ ]
+ }
+ ],
+ "source": [
+ "#포털계정 로그인\n",
+ "browser.find_element_by_xpath('/html/body/div/div/div[2]/div/ul/li[1]/a').click()\n",
+ "browser.implicitly_wait(time_to_wait=2)\n",
+ "\n",
+ "#ID 입력\n",
+ "browser.find_element_by_xpath('//*[@id=\"loginId\"]').send_keys(usr)\n",
+ "browser.implicitly_wait(time_to_wait=2)\n",
+ "\n",
+ "#PW 입력\n",
+ "browser.find_element_by_xpath('//*[@id=\"loginPasswd\"]').send_keys(pwd)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":2: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
+ " browser.find_element_by_xpath('//*[@id=\"loginBtn\"]').click()\n"
+ ]
+ }
+ ],
+ "source": [
+ "# 로그인 버튼 클릭 \n",
+ "browser.find_element_by_xpath('//*[@id=\"loginBtn\"]').click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":2: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
+ " browser.find_element_by_xpath('/html/body/div[4]/div[3]/div/button[3]').click()\n"
+ ]
+ },
+ {
+ "ename": "NoSuchElementException",
+ "evalue": "Message: no such element: Unable to locate element: {\"method\":\"xpath\",\"selector\":\"/html/body/div[4]/div[3]/div/button[3]\"}\n (Session info: chrome=97.0.4692.71)\nStacktrace:\nBacktrace:\n\tOrdinal0 [0x0102FDC3+2555331]\n\tOrdinal0 [0x00FC77F1+2127857]\n\tOrdinal0 [0x00EC2E08+1060360]\n\tOrdinal0 [0x00EEE49E+1238174]\n\tOrdinal0 [0x00EEE69B+1238683]\n\tOrdinal0 [0x00F19252+1413714]\n\tOrdinal0 [0x00F07B54+1342292]\n\tOrdinal0 [0x00F175FA+1406458]\n\tOrdinal0 [0x00F07976+1341814]\n\tOrdinal0 [0x00EE36B6+1193654]\n\tOrdinal0 [0x00EE4546+1197382]\n\tGetHandleVerifier [0x011C9622+1619522]\n\tGetHandleVerifier [0x0127882C+2336844]\n\tGetHandleVerifier [0x010C23E1+541697]\n\tGetHandleVerifier [0x010C1443+537699]\n\tOrdinal0 [0x00FCD18E+2150798]\n\tOrdinal0 [0x00FD1518+2168088]\n\tOrdinal0 [0x00FD1660+2168416]\n\tOrdinal0 [0x00FDB330+2208560]\n\tBaseThreadInitThunk [0x7749FA29+25]\n\tRtlGetAppContainerNamedObjectPath [0x77CA7A9E+286]\n\tRtlGetAppContainerNamedObjectPath [0x77CA7A6E+238]\n",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mNoSuchElementException\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# 공지사항 닫기 클릭\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mbrowser\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfind_element_by_xpath\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'/html/body/div[4]/div[3]/div/button[3]'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclick\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\selenium\\webdriver\\remote\\webdriver.py\u001b[0m in \u001b[0;36mfind_element_by_xpath\u001b[1;34m(self, xpath)\u001b[0m\n\u001b[0;32m 518\u001b[0m \u001b[0mstacklevel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 519\u001b[0m )\n\u001b[1;32m--> 520\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfind_element\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mby\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mBy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mXPATH\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mxpath\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 521\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 522\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mfind_elements_by_xpath\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mxpath\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m->\u001b[0m \u001b[0mWebElement\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\selenium\\webdriver\\remote\\webdriver.py\u001b[0m in \u001b[0;36mfind_element\u001b[1;34m(self, by, value)\u001b[0m\n\u001b[0;32m 1242\u001b[0m \u001b[0mvalue\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'[name=\"%s\"]'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1243\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1244\u001b[1;33m return self.execute(Command.FIND_ELEMENT, {\n\u001b[0m\u001b[0;32m 1245\u001b[0m \u001b[1;34m'using'\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mby\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1246\u001b[0m 'value': value})['value']\n",
+ "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\selenium\\webdriver\\remote\\webdriver.py\u001b[0m in \u001b[0;36mexecute\u001b[1;34m(self, driver_command, params)\u001b[0m\n\u001b[0;32m 422\u001b[0m \u001b[0mresponse\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcommand_executor\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexecute\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdriver_command\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 423\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mresponse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 424\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0merror_handler\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcheck_response\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresponse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 425\u001b[0m response['value'] = self._unwrap_value(\n\u001b[0;32m 426\u001b[0m response.get('value', None))\n",
+ "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\selenium\\webdriver\\remote\\errorhandler.py\u001b[0m in \u001b[0;36mcheck_response\u001b[1;34m(self, response)\u001b[0m\n\u001b[0;32m 245\u001b[0m \u001b[0malert_text\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'alert'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'text'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 246\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mexception_class\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmessage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mscreen\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstacktrace\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malert_text\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# type: ignore[call-arg] # mypy is not smart enough here\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 247\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mexception_class\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmessage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mscreen\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstacktrace\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 248\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 249\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_value_or_default\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mobj\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mMapping\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0m_KT\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_VT\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0m_KT\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdefault\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0m_VT\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m->\u001b[0m \u001b[0m_VT\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;31mNoSuchElementException\u001b[0m: Message: no such element: Unable to locate element: {\"method\":\"xpath\",\"selector\":\"/html/body/div[4]/div[3]/div/button[3]\"}\n (Session info: chrome=97.0.4692.71)\nStacktrace:\nBacktrace:\n\tOrdinal0 [0x0102FDC3+2555331]\n\tOrdinal0 [0x00FC77F1+2127857]\n\tOrdinal0 [0x00EC2E08+1060360]\n\tOrdinal0 [0x00EEE49E+1238174]\n\tOrdinal0 [0x00EEE69B+1238683]\n\tOrdinal0 [0x00F19252+1413714]\n\tOrdinal0 [0x00F07B54+1342292]\n\tOrdinal0 [0x00F175FA+1406458]\n\tOrdinal0 [0x00F07976+1341814]\n\tOrdinal0 [0x00EE36B6+1193654]\n\tOrdinal0 [0x00EE4546+1197382]\n\tGetHandleVerifier [0x011C9622+1619522]\n\tGetHandleVerifier [0x0127882C+2336844]\n\tGetHandleVerifier [0x010C23E1+541697]\n\tGetHandleVerifier [0x010C1443+537699]\n\tOrdinal0 [0x00FCD18E+2150798]\n\tOrdinal0 [0x00FD1518+2168088]\n\tOrdinal0 [0x00FD1660+2168416]\n\tOrdinal0 [0x00FDB330+2208560]\n\tBaseThreadInitThunk [0x7749FA29+25]\n\tRtlGetAppContainerNamedObjectPath [0x77CA7A9E+286]\n\tRtlGetAppContainerNamedObjectPath [0x77CA7A6E+238]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# 공지사항 닫기 클릭 \n",
+ "browser.find_element_by_xpath('/html/body/div[4]/div[3]/div/button[3]').click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 채용공고 클릭 \n",
+ "browser.find_element_by_xpath('//*[@id=\"mainWidgetUseLstWrap\"]/li[5]/div/a').click()\n",
+ "browser.implicitly_wait(time_to_wait=2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}