교내 그룹웨어의 수신접수함에서 협조전 문서를 자동으로 수집하여 Google Sheets와 Notion DB에 연동하는 업무 리스트업 프로그램입니다.
| 기능 | 설명 |
|---|---|
| 자동 로그인 | 교내 학생포털에 자동으로 로그인합니다. |
| 협조전 스크래핑 | 지정한 날짜의 협조전 문서를 자동으로 수집합니다. |
| 다중 페이지 처리 | 여러 페이지에 걸쳐 있는 문서를 자동으로 탐색합니다. |
| Google Sheets 연동 | 수집된 데이터를 Google Sheets에 자동으로 추가합니다. |
| Notion DB 연동 | 수집된 데이터를 Notion 데이터베이스에 자동으로 추가합니다. |
- Python 3.x
- Selenium
- Google Sheets API
- Notion API
- python-dotenv
.
│ .env.example # 환경변수 예시 파일
│ main.py # 프로그램 진입점
│ README.md # 프로젝트 문서
│ requirements.txt # Python 패키지 의존성
│
├─credentials # Google API 인증 정보
│ credentials.json
│
├─drivers # ChromeDriver 실행 파일
│ chromedriver.exe
│
└─src
│ app.py # 메인 애플리케이션 로직
│ config.py # 환경 설정 관리
│
├─daelim
│ ├─gw
│ │ inbox_scraper.py # 수신접수함 스크래핑
│ │
│ └─pt
│ login_flow.py # 로그인 처리
│ menu_navigation.py # 수신접수합으로 이동
│
└─infra
├─browser
│ chrome_driver.py # Chrome WebDriver 설정
│
└─service
notion.py # Notion API 연동
spreadsheet.py # Google Sheets API 연동
pip install -r requirements.txtrequirements.txt 내용:
selenium
python-dotenv
google-auth
google-auth-oauthlib
google-auth-httplib2
google-api-python-client
requests
- Chrome 브라우저 버전 확인:
chrome://settings/help - ChromeDriver 다운로드
drivers/chromedriver.exe경로에 저장
.env.example을 복사하여 .env 파일을 생성합니다.
cp .env.example .env# DUC (교내 학생포털 로그인 정보)
URL=https://pt.daelim.ac.kr
USER_ID=your_student_id
USER_PW=your_password
# Selenium (ChromeDriver 경로)
CHROME_DRIVER_PATH=drivers/chromedriver.exe
# Google Sheets API
SPREADSHEET_ID=your_spreadsheet_id
CREDENTIALS_PATH=credentials/credentials.json
# Notion API
NOTION_TOKEN=your_notion_integration_token
DB_ID=your_notion_database_id- Google Cloud Console에서 프로젝트 생성
- Google Sheets API 활성화
- 서비스 계정 생성 및 JSON 키 다운로드
credentials/credentials.json에 저장- 서비스 계정 이메일을 Google Sheets에 공유 권한 부여 Google Sheets 형식:
- 시트 이름:
AI시스템과 - 컬럼 구성:
도착일자 | URL | 이미지 | 협조전 제목 | 발신부서 | 기안자
- Notion Developers에서 Integration 생성
- Internal Integration Token 복사
- Notion 데이터베이스 생성 후 Integration 연결
- 데이터베이스 ID 확인 (URL에서 추출)
Notion DB 속성 구성:
| 속성명 | 유형 |
|---|---|
| 도착일자 | Date 타입 |
| URL | URL 타입 |
| 이미지 | URL 타입 |
| 협조전 제목 | Title 타입 |
| 발신부서 | Text 타입 |
| 기안자 | Text 타입 |
python main.py- 브라우저가 자동으로 열립니다.
- 교내 학생포털에 자동 로그인됩니다.
- 그룹웨어 수신접수함으로 이동합니다.
- 날짜 입력 프롬프트가 나타나면 원하는 날짜를 입력합니다.
📅 추출할 날짜를 입력하세요. (YYYY-MM-DD) : 2025-09-26 - 해당 날짜의 협조전 문서가 자동으로 수집됩니다.
Google Sheets와Notion DB에 데이터가 추가됩니다.- 작업 완료 후 Enter 키를 누르면 브라우저가 종료됩니다.
💻 브라우저가 열렸습니다.
☑️ [진입] PortalMain 프레임
🔓 로그인 완료
☑️ [진입] right 프레임
📅 추출할 날짜를 입력하세요. (YYYY-MM-DD) : 2025-09-26
---------------------------------------------------------------------------
- 도착일자 : 2025-09-26
- URL : https://gw.daelim.ac.kr/ezApprovalG/recevGSusin.do?docID=...
- 이미지 : https://gw.daelim.ac.kr/fileroot/0/files/upload_common/...
- 협조전 제목 : 2025학년도 2학기 중간고사 시행 안내
- 발신부서 : 교육행정팀
- 기안자 : 김대림
---------------------------------------------------------------------------
✅ 1행 추가 완료 : Google Sheets
✅ 1행 추가 완료 : Notion DB
🔍 작업 완료! Enter 키를 누르면 브라우저가 종료됩니다...
1. 프로그램 진입점 (main.py)
↓
2. 메인 로직 실행 (app.py - main())
│
├─ [설정 단계]
│ ├─ 환경 설정 로드 (config.py - load_settings())
│ └─ Chrome WebDriver 생성 (chrome_driver.py - build_driver())
│
├─ [로그인 및 이동]
│ ├─ 포털 로그인 (login_flow.py - login_to_portal())
│ │ - 포털 접속
│ │ - PortalMain 프레임 진입
│ │ - 로그인 정보 입력 및 로그인
│ │
│ └─ 수신접수함 이동 (menu_navigation.py - go_to_inbox())
│ - 수신접수 아이콘 클릭
│ - 새 창으로 전환
│
├─ [데이터 수집]
│ └─ 협조전 스크래핑 (inbox_scraper.py - scrape_inbox())
│ - right 프레임 진입
│ - 사용자 입력: 추출 날짜 (YYYY-MM-DD)
│ - 페이지 순회하며 데이터 수집
│ - DocList 반환
│
├─ [데이터 연동]
│ ├─ Google Sheets 추가 (spreadsheet.py - append_to_spreadsheet())
│ │ - 서비스 계정 인증
│ │ - Sheets API로 데이터 추가
│ │
│ └─ Notion DB 추가 (notion.py - append_to_notion())
│ - Notion API 인증
│ - 각 문서를 Notion 페이지로 생성
│
└─ [종료]
- 사용자 입력 대기 (Enter)
- 브라우저 종료 (driver.quit())
.env파일의USER_ID와USER_PW를 확인하세요.- 포털 사이트에서 직접 로그인이 되는지 확인하세요.
SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version XX
해결 방법:
- Chrome 브라우저 버전 확인:
chrome://settings/help - 동일한 버전의 ChromeDriver 다운로드
drivers/chromedriver.exe교체
credentials.json파일이 올바른 경로에 있는지 확인- 서비스 계정 이메일에 Google Sheets 편집 권한이 있는지 확인
SPREADSHEET_ID가 정확한지 확인
NOTION_TOKEN이 올바른지 확인- Integration이 데이터베이스에 연결되어 있는지 확인
- 데이터베이스 속성 이름이 정확히 일치하는지 확인
❌ 잘못된 형식입니다. YYYY-MM-DD 형식으로 입력
해결 방법:
- 날짜를
2025-09-26형식으로 입력 - 하이픈(
-)을 반드시 포함
- 본 프로그램은 개인 학습 및 업무 리스트업 목적으로 제작되었습니다.
- 학교 계정 정보는 절대 공유하지 마십시오.
.env파일과credentials.json파일은 Git에 커밋하지 마십시오.- 과도한 요청은 서버에 부담을 줄 수 있으니 적절히 사용하십시오.
💡 Tip: 문제가 발생하면 먼저 각 설정값이 올바른지 확인하고, 브라우저를 수동으로 조작하여 정상 동작하는지 테스트하십시오.